我的屏幕看起来像这样
问题在于,当我按下重置按钮时,代码输入字段不会像预期的那样清除。
jsf如下:
<h:form id="form1">
<h:inputText id="code" value="#{MyBean.data.code}" />
<a4j:commandButton immediate="true"
action="#{MyBean.clear}" render="form1" update="@form">
</a4j:commandButton>
<h:outputText value="#{session.lastAccessedTime}">
<f:convertDateTime pattern="HH:mm:ss.SSS" type="date" />
</h:outputText>
</h:form>
bean代码如下:
public class MyBean {
DataInnerClass data = new DataInnerClass();
//getter and setter for data
public class DataInnerClass {
private String code;
//getter and setter for code
public DataInnerClass() {
super();
}
}
public void clear() {
data = new DataInnerClass();
Logger.getLogger( MyBean.class.getName() ).log(Level.SEVERE, "data.code="+data.code);
//logs data.code=null
}
}
当我按下Reset按钮时,日志显示字段code
的值已变为null(不再是'ZZ');我也知道屏幕刷新成功,因为我显示了当前时间,每次点击后都会更新。因此,支持bean属性更改,屏幕刷新,输入字段仍然保持相同的值。你知道为什么会这样吗?
答案 0 :(得分:1)
我找到了有用的BalusC答案:How can I populate a text field using PrimeFaces AJAX after validation errors occur?
我从那里了解到,在某些验证错误的情况下,输入字段将保留用户输入的值,并且将与辅助bean不同步。我必须强调,在我的情况下,没有验证错误,但仍然为<f:ajax resetValues>
添加commandButton
为我工作。
resetValues
属性的具体示例位于https://jsflive.wordpress.com/2013/06/20/jsf-22-reset-values/
最后,我的按钮标签如下所示:
<a4j:commandButton immediate="true"
action="#{MyBean.clear}" render="form1" update="@form">
<f:ajax render="code" resetValues="true" />
</a4j:commandButton>