这个问题与此处的问题类似,但该解决方案在此处不起作用.
以这个简单到最大的例子为例:
<h:form>
<h:inputText required="true" value="#{mrBean.someValue}" />
<h:inputText required="true" value="#{mrBean.someValue2}" />
<h:commandButton value="Submit">
<f:ajax execute="@form" />
</h:commandButton>
<h:commandButton immediate="true" action="#{mrBean.clearAllValues}" value="Clear">
<f:ajax render="@form" />
</h:commandButton>
</h:form>
Run Code Online (Sandbox Code Playgroud)
和豆代码:
public void clearAllValues() {
setSomeValue(null);
setSomeValue2(null);
}
Run Code Online (Sandbox Code Playgroud)
采取这种情况:
我希望这个场景能够清除输入值,但它不会恢复"X",这是先前提交的值.它实际上从来没有真正运行mrBean.getSomeValue()在bean上(这将返回null并清除输入字段)
问题与JSF不能很好地处理必填字段和立即有关.我想知道是否有人设法克服了这个问题.
谢谢!本.
您的代码示例过于简单.只有在有多个必需输入时,才会出现所描述的问题症状.在示例中添加一个必需的输入字段.只填写其中一个.空的验证错误将发生.然后在两者中输入其他内容并按清除.有效输入确实将保留先前提交的值.
此问题和本博客文章中详细介绍了此问题.解决方案归结为收集所有待清除的输入组件并调用每个组件.这可以通过博客文章中所示的方式完成.EditableValueHolder#resetValue()<f:actionListener>
在您的特定情况下,另一种方法,因为您只想清除整个表单是使用一个<h:button>基本上只刷新页面.如果您的bean是请求或视图作用域,那么它也将被重新创建,并且所有属性都设置为default.
<h:form>
<h:inputText required="true" value="#{mrBean.someValue}" />
<h:commandButton value="Submit">
<f:ajax execute="@form" />
</h:commandButton>
<h:button value="Clear" />
</h:form>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3845 次 |
| 最近记录: |