我遇到的情况是 selectOneMenu 的值绑定到支持 bean。
我需要一个不更新模型值的按钮(这就是为什么它具有立即=“true”属性)。
该按钮的操作方法更改了 selectOneMenu 绑定到的值,但是当重新显示页面时,将显示原始值(提交的值),而不是操作方法中设置的值。
有什么想法为什么会发生这种情况吗?
如果我没有很好地解释问题,请告诉我。
EDIT:
As requested here is the source code in question:
页面代码:
<h:selectOneMenu id="selectedPerson"
binding="#{bindings.selectPersonComponent}"
value="#{bean.selectedPerson}">
<s:selectItems var="op" value="#{bean.allPersons}"
label="#{op.osoba.ime} #{op.osoba.prezime}"
noSelectionLabel="#{messages.selectAPerson}">
</s:selectItems>
<f:converter converterId="unmanagedEntityConverter" />
</h:selectOneMenu>
...
<a4j:commandButton action="#{bean.createNew}" value="#{messages.createNew}"
immediate="true" reRender="panelImovine">
</a4j:commandButton>
java代码:
private Person selectedPerson;
public String createNew() {
log.debug("New created...");
selectedPerson = null;
bindings.getSelectPersonComponent().setSubmittedValue(null); //SOLUTION
return "";
}
解决方案在划线处SOLUTION :)
由于在发布此问题后不久经常发生这种情况,我找到了答案:
问题的原因在这里详细解释:清除输入组件
问题是(如所解释的)模型值尚未更新,因此提交的输入仍在 component.subscribedValue 字段中,并且如果该字段不为空,则会显示该字段。模型更新后通常会清空。
第一个解决方案在我的情况下不起作用,因为视图中还有其他重要状态不能丢失。但第二个解决方案效果很好:
component.setSubmittedValue(null);
这就是所需要的一切:这是一些额外的工作,因为组件必须绑定到某个 bean,但也没有那么糟糕。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)