我有一种情况,其中有一个selectOneMenu,其值绑定到支持bean.
我需要一个不更新模型值的按钮(这就是为什么它有immediate ="true"属性).
该按钮的action方法更改selectOneMenu绑定的值,但是当重新显示页面时,将显示原始值(已提交的值)而不是action方法中设置的值.
任何想法为什么会发生这种情况?
如果我没有足够好地解释这个问题,请告诉我.
<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>
Run Code Online (Sandbox Code Playgroud)
private Person selectedPerson;
public String createNew() {
log.debug("New created...");
selectedPerson = null;
bindings.getSelectPersonComponent().setSubmittedValue(null); //SOLUTION
return "";
}
Run Code Online (Sandbox Code Playgroud)
解决方案是在内衬标记解决方案 :)
由于在发布此问题后经常发生这种情况,我找到了答案:
这里详细解释了问题的原因:ClearInputComponents
问题是(如所解释的)模型值尚未更新,因此提交的输入仍在component.submittedValue字段中,如果不是空的话,则显示该字段.模型更新后,它通常会被清空.
第一个解决方案在我的情况下不起作用,因为视图中还有其他重要的状态,不能丢失.但第二个解决方案很有效:
component.setSubmittedValue(null);
Run Code Online (Sandbox Code Playgroud)
这就是所需要的:它是一个额外的工作,因为组件必须绑定到某个bean,但不是那么糟糕.
归档时间: |
|
查看次数: |
23414 次 |
最近记录: |