12

我有一个 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"在我的重置按钮上使用它,因为它会产生一些其他问题。

4

2 回答 2

27

默认情况下<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" />
于 2012-09-27T11:03:46.633 回答
6

这在 PrimeFaces 5.3 中对我有用

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

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

于 2016-12-06T14:32:20.243 回答