【问题标题】:JSF 2 - No way to do Required Inputs + Clear (Immediate) Button?JSF 2 - 没有办法做必需的输入+清除(立即)按钮?
【发布时间】:2012-03-27 08:43:16
【问题描述】:

这个问题与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>

还有豆码:

public void clearAllValues() {
    setSomeValue(null);
    setSomeValue2(null);
}

以这个场景为例:

  • 在第一个输入中输入“X”值
  • 使用“提交”按钮提交。 (验证失败)
  • 在同一输入中输入“Y”。
  • 点击“清除”按钮。
  • 结果:输入不清除,第一个输入的值返回到“X”。

我希望这种情况会清除输入值,但它不会,相反,它会恢复先前提交的值“X”。它实际上从未真正在 bean 上运行 mrBean.getSomeValue()(它会返回 null 并清除输入字段)

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

谢谢! 本。

【问题讨论】:

  • @MattHandy 我正在使用 MyFaces 2.0.11。

标签: jsf jsf-2


【解决方案1】:

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

这个问题在this questionthis blog article中有详细描述。解决方案归结为收集所有要清除的输入组件并在每个组件上调用EditableValueHolder#resetValue()。这可以通过&lt;f:actionListener&gt; 来完成,如博客文章中所示。

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

【讨论】:

  • 谢谢!!我修复了示例来表示问题。
【解决方案2】:

你确定 clearAllValues 被执行了吗?您是否在日志或控制台中收到任何错误? 尝试添加执行

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

【讨论】:

  • 您的 someValue 设置器是在 clearallvalues 之前还是之后执行的?
猜你喜欢
  • 2012-12-29
  • 1970-01-01
  • 2014-09-17
  • 2018-09-15
  • 1970-01-01
  • 1970-01-01
  • 2016-01-06
  • 1970-01-01
  • 2015-03-22
相关资源
最近更新 更多