ValueCangeListener在JSF 2.0中进行第二次尝试

时间:2014-03-18 12:54:12

标签: jsf-2

我有两个selectOneMenu元素,它们的id只有区别。  valueChangeListener第二次尝试。 首先尝试,页面是刷新的,但不会去valueChangeCode,因此没有值更改。在第二次尝试时,它变为valueChangeCode并且它获得新值,并且selectOneMenu都显示新值。

            <h:selectOneMenu id="changeCurrency" value="#dataBean.showCurrency}"                valueChangeListener="#myBean.changePaymentCurreny}"
valueChangeListener="#{myBean.changePaymentCurreny}"
                immediate="true"
                onchange="submit()">
                <f:selectItems value="#{my.currencyList}" />
            </h:selectOneMenu>
           <h:selectOneMenu id="changeCurrency2" 
                value="#{dateBean.showCurrency}" 
                valueChangeListener="#{myBean.changePaymentCurreny}"
                immediate="true"
                onchange="submit()">
                <f:selectItems value="#{myBean.currencyList}" />
          </h:selectOneMenu>

在ValueChangeListener代码中。

dataBean.setShowCurrency(newCurrency);
FacesContext.getCurrentInstance().renderResponse();
FacesContext.getCurrentInstance().getViewRoot().getChildren().clear();

当我删除以getChidren.clear结尾的行,并且我更改了它们的值时,调用了changeListener并在第一次尝试时更改了值。 在视图中,我更改的只有一个选择菜单显示新值。其他selectOnemenu仍显示旧值。

dataBean和myBean在sessionScope中。当我的myBean放在requestscope上时,在页面加载时起作用的ajax请求不会导致mybean导致为null。

有人能说清楚这个站吗? 非常感谢。

1 个答案:

答案 0 :(得分:0)

尝试为这样的ajax事件标记更改valueChangeListener。

<h:selectOneMenu id="changeCurrency" value="#dataBean.showCurrency}" valueChangeListener="#myBean.changePaymentCurreny}" onchange="submit()"> 
   <f:selectItems value="#{my.currencyList}" />
   <f:ajax event="change" listener="#{myBean.changePaymentCurreny}" process="@this" partialSubmit="true"  />    
</h:selectOneMenu>

<h:selectOneMenu id="changeCurrency2" value="#{dateBean.showCurrency}" onchange="submit()">
   <f:selectItems value="#{myBean.currencyList}" />
   <f:ajax event="change" listener="#{myBean.changePaymentCurreny}" process="@this" partialSubmit="true"  />  
</h:selectOneMenu>