【问题标题】:Reset input fields without executing validation重置输入字段而不执行验证
【发布时间】:2012-09-19 02:41:11
【问题描述】:

我有一个 Facelets 视图如下:

<h:form id="f1">
<p:panelGrid id="p1" columns="2"> 
<p: inputText value="Distance Travelled::/><p:inputText value="#{airTransportUsage.distance}" immediate="true"
required="true" requiredMessage="Distance Travelled Field cannot be left blank.."
converterMessage="Distance Travelled must be a number"
validatorMessage="Distance Travelled must be a valid number.."
id="dis">
<f:validateLongRange minimum="1"/>
</p:inputText>
<p:commandButton value="Reset" action="#{airTransportUsage.reset}" update=":f1:p1" />
</p:panelGrid>
</h:form>

当点击重置按钮时,由于验证,相应的方法永远无法执行。我不能在我的重置按钮上使用immediate="true",因为它会产生一些其他问题。

【问题讨论】:

    标签: jsf primefaces facelets reset


    【解决方案1】:

    &lt;p:commandButton&gt; 默认处理整个表单 (process="@form"),您可以通过在 process 属性中仅指定当前组件来更改此设置。

    <p:commandButton value="Reset" ... process="@this" />
    

    但是,如果表单已经事先经过验证,这将失败。被标记为无效的输入字段将不会使用新的模型值(您自己重置)进行更新。如果您使用的是 PrimeFaces 3.4,请在按钮中嵌入 &lt;p:resetInput&gt;

    <p:commandButton value="Reset" ... process="@this">
        <p:resetInput target="@form" />
    </p:commandButton>
    

    如果您还没有使用 PrimeFaces 3.4 并且无法升级到它,您可以使用 OmniFaces ResetInputAjaxActionListener

    另一种完全不同的选择是通过新的 GET 请求刷新当前页面。

    <p:button value="Reset" />
    

    【讨论】:

      【解决方案2】:

      这在 PrimeFaces 5.3 中对我有用

      <p:commandButton action="#{bean.reset()}" value="Reset" process="@this" update="@form" resetValues="true" />
      

      如果需要,您可以将更新属性的"@form" 目标替换为特定组件。

      【讨论】:

      • 这对我有用。我需要 actionListener 和 resetValues。谢谢!
      猜你喜欢
      • 2020-06-20
      • 1970-01-01
      • 2019-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 2021-12-11
      • 2015-07-05
      相关资源
      最近更新 更多