我有两个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。
有人能说清楚这个站吗? 非常感谢。
答案 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>