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

时间:2012-09-27 10:26:05

标签: jsf primefaces facelets reset

我有一个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",因为它会产生一些其他问题。

2 个答案:

答案 0 :(得分:25)

<p:commandButton>进程确实默认为整个表单(process="@form"),您可以通过仅指定process属性中的当前组件来更改此内容。

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

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

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

如果您尚未使用PrimeFaces 3.4并且无法升级到此版本,则可以使用OmniFaces ResetInputAjaxActionListener进行此操作。

完全不同的替代方法是通过全新的GET请求刷新当前页面。

<p:button value="Reset" />

答案 1 :(得分:3)

这在PrimeFaces 5.3中对我有用

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

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