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をまだ使用しておらず、アップグレードできない場合は、OmniFacesResetInputAjaxActionListenerを使用できます。

まったく異なる代替手段は、新しいGETリクエストによって現在のページを更新することです。

<p:button value="Reset" />
于 2012-09-27T11:03:46.633 に答える
6

これはPrimeFaces5.3でうまくいきました

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

"@form"必要に応じて、更新属性のターゲットを特定のコンポーネントに置き換えることができます。

于 2016-12-06T14:32:20.243 に答える