Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSF2-无法进行所需的输入+;清除(立即)按钮?_Jsf_Jsf 2 - Fatal编程技术网

JSF2-无法进行所需的输入+;清除(立即)按钮?

JSF2-无法进行所需的输入+;清除(立即)按钮?,jsf,jsf-2,Jsf,Jsf 2,这个问题与这个问题类似,但这个解决方案在这里不起作用 以这个简单到最大的例子: <h:form> <h:inputText required="true" value="#{mrBean.someValue}" /> <h:inputText required="true" value="#{mrBean.someValue2}" /> <h:commandButton value="Submit"> <f:ajax e

这个问题与这个问题类似,但这个解决方案在这里不起作用

以这个简单到最大的例子:

<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>
以这种情况为例:

  • 在第一个输入中输入“X”值
  • 使用“提交”按钮提交。(验证失败)
  • 在同一输入中输入“Y”
  • 单击“清除”按钮
  • 结果:输入未清除,第一个输入的值返回“X”
我希望这个场景能够清除输入值,但它不会,相反,它会恢复先前提交的值“X”。它实际上从未在bean上真正运行过
mrBean.getSomeValue()
(这将返回null并清除输入字段)

这个问题与JSF不能很好地处理必填字段和即时消息有关。我想知道是否有人设法克服了这个问题

谢谢!
Ben.

您确定执行了clearAllValues吗?日志或控制台中是否有错误? 尝试添加执行

<f:ajax render="@form" execute="@this">

您的代码示例过于简单。仅当您有多个所需输入时,才会出现所述问题症状。在示例中再添加一个必需的输入字段。只填写其中一个。空的将出现验证错误。然后在两者中输入其他内容,然后按clear。有效的输入确实会保留以前提交的值

和中详细描述了此问题。解决方案归结为收集所有待清除的输入组件并调用其中的每个组件。这可以通过一个
来完成,如博客文章所示

在您的特殊情况下,另一种方法是使用
,它基本上只是刷新页面,因为您只想清除整个表单。如果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>


@MattHandy我正在使用MyFaces 2.0.11。您的someValue设置程序是在clearallvalues之前还是之后执行的?谢谢!!我修正了这个例子来表示这个问题。
<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>