我想在使用ajax激活其中的复选框(例如“使用账单地址作为传递地址?”)和后台bean的设置器时自动填写表单。未能在提交/验证失败后自动填充支持bean设置器的字段
因此,支持bean的setter为该复选框的值设置了其他字段,并且ajax具有rerenderd的整个表单。只要没有验证器发挥作用,它就可以工作。现在,我必须添加一个验证器到一些字段。当提交表单为无效(在这种情况下为空)状态时,相应的验证失败。如果在此之后,选中自动填充表单的复选框并且ajax再次提交表单,当表单被重新渲染时,只有经过验证的表单字段将被填充。所有其他字段保持空白,尽管后台bean应该设置它们。
为什么JSF只在验证失败一次后才渲染验证字段的支持bean值,而不是其他字段的值? JSF生命周期中的哪个逻辑负责这种行为?
这里有一个小例子:
@ManagedBean
public class TestBean
{
private boolean toggle;
private String stringValue1;
private String stringValue2;
public boolean isToggle() {
return toggle;
}
public void setToggle(boolean toggle) {
this.toggle = toggle;
if(this.toggle) {
this.stringValue1 = "Value1";
this.stringValue2 = "Value2";
}
}
// ... the usual getters and setters
}
和相应的JSF表单:
<h:form id="testForm">
<h:messages />
<h:inputText value="#{testBean.stringValue1}">
<f:validateRequired />
</h:inputText>
<h:inputText value="#{testBean.stringValue2}" />
<h:selectBooleanCheckbox id="toggleBox" value="#{testBean.toggle}">
<f:ajax render="testForm" />
</h:selectBooleanCheckbox>
<h:commandButton type="submit" value="Submit">
<f:ajax execute="@form" render="testForm" />
</h:commandButton>
</h:form>
first, the form is submitted without values
在此先感谢您的帮助!
单独留下getter和setter,使用listeners。 – Geinmachi
对不起,在这里钝... -_- 但我怀疑你的意思是描述的动作和/或valueChangeListener [here](http://docs.oracle.com/javaee/6/tutorial/doc/bnatn的.html#bnats)? 我添加了一个valueChangeListener属性到复选框和辅助bean中的一个方法,该方法设置了其他两个字段。效果依然如此。 – Burny
选中其中一个是重复的:https://www.google.com/search?q=fields+not+reset+after+validation+failed – Kukeltje