重置输入字段而不执行验证

Bas*_*suz 10 jsf facelets reset primefaces

我有一个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>
Run Code Online (Sandbox Code Playgroud)

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

Bal*_*usC 25

这些<p:commandButton>过程确实默认为整个form(process="@form"),您可以通过仅指定process属性中的当前组件来更改它.

<p:commandButton value="Reset" ... process="@this" />
Run Code Online (Sandbox Code Playgroud)

但是,如果表单已经事先验证过,则会失败.已标记为无效的输入字段不会使用新模型值(您自己重置)更新.如果你正在使用PrimeFaces 3.4,那么嵌入<p:resetInput>按钮:

<p:commandButton value="Reset" ... process="@this">
    <p:resetInput target="@form" />
</p:commandButton>
Run Code Online (Sandbox Code Playgroud)

如果您尚未使用PrimeFaces 3.4且无法升级,则可以使用OmniFaces ResetInputAjaxActionListener.

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

<p:button value="Reset" />
Run Code Online (Sandbox Code Playgroud)


小智 6

这在 PrimeFaces 5.3 中对我有用

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

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