此问题类似于问题here,但该解决方案在此处不起作用。
采用这个简单到最大的例子:
<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>
和bean代码:
public void clearAllValues() {
setSomeValue(null);
setSomeValue2(null);
}
采取这种情况:
我希望这个场景能够清除输入值,但它不会恢复“X”,即先前提交的值。它实际上从未在bean上运行mrBean.getSomeValue()
(它将返回null并清除输入字段)
问题与JSF无法正常使用必填字段有关。我想知道是否有人设法克服了这个问题。
谢谢! 本。
答案 0 :(得分:5)
您的代码示例过于简单了。只有在有多个必需输入时,才会出现所描述的问题症状。在示例中添加一个必需的输入字段。只填写其中一个。空的验证错误将发生。然后在两者中输入其他内容并按清除。有效输入确实会保留先前提交的值。
this question和this blog article详细介绍了此问题。解决方案归结为收集所有待清除的输入组件并在每个组件上调用EditableValueHolder#resetValue()
。这可以使用<f:actionListener>
来完成,如博客文章中所示。
在您的特定情况下的另一种方式,因为您只想清除整个表单是使用<h:button>
,它基本上只是刷新页面。如果您的bean是请求或视图作用域,那么它也将被重新创建,并将所有属性设置为默认值。
<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>
答案 1 :(得分:0)
你确定clearAllValues被执行了吗?你在日志或控制台中有任何错误吗? 尝试添加执行
<f:ajax render="@form" execute="@this">