1

I have a problem in JSF 2.1: an input text field is bound to a list in a backing bean, when submit the form, if input value is not blank, the list can fetch the new input value; if input value is blank, the list just keep old input value.

Please could anyone tell what the problem is? How to make the list in a backing bean fetch new input value exactly ?

JSF code:

<h:form id="the-form">
    <ui:repeat value="#{myBean.listDate}" var="a" varStatus="aStatus">
        <h:outputLabel value="input date" />
        <h:inputText value="#{a}"  valueChangeListener="#{myBean.onChangeCTDate}" >
            <f:ajax event="change"  execute="@this" listener="#{myBean.onChangeCTDate}" />
        </h:inputText>
    </ui:repeat>
                
    <h:commandButton id="btnValidate" value="validate" action="#{myBean.onValidate}">
        <f:ajax execute="@form" render="@form" />
    </h:commandButton>

</h:form>

Bean code:

@ManagedBean(name = "myBean")
@SessionScoped
public class MyBean {

    public void onChangeCTDate(ValueChangeEvent vce) throws SQLException {
        String s = (String) vce.getNewValue();
        System.out.println("new Value = " + s);
    }

    public void onChangeCTDate(AjaxBehaviorEvent e) throws SQLException {
        Object val = ((UIInput) e.getSource()).getValue();
        System.out.println("Value = " + val);
    }

    public void onValidate() {
        System.out.println("---list begin---");
        for (String item : listDate) {
            if (item == null) {
                System.out.println("Value = " + item);
            } else {
                System.out.println("Value = " + item);
            }
        }
        System.out.println("---list end---");

    }

}

Here is an example of runtime situation:

Open the above page, 
click button "validate", 
input value then click button "validate", 
clear input value then click button "validate".

Runtime console display:

---list begin---
Value = 
---list end---
new Value = 07/04/2021
Value = 07/04/2021
---list begin---
Value = 07/04/2021
---list end---
new Value = null
Value = 07/04/2021
new Value = null
---list begin---
Value = 07/04/2021
---list end---

lklao
  • 11
  • 3
  • Please read how to provide a [mcve] and https://stackoverflow.com/questions/25339056/understanding-primefaces-process-update-and-jsf-fajax-execute-render-attributes – Jasper de Vries Apr 07 '21 at 10:34
  • @Jasper de Vries, thanks for your quick reply. I've updated my question so I hope it’s clearer. – lklao Apr 07 '21 at 16:09

0 Answers0