7

私の JSF アプリケーションでは、検証の失敗/成功時に更新するコンポーネントを制御できるように、コマンド ボタンの更新属性にいくつかの条件を設定しようとしています。

PrimeFaces: conditional update on validationを参考に使ってみた

<p:commandLink process="@form" listener="#{foo}" 
  update="somethingElse" oncomplete="if (!args.validationFailed) $("#link").click();">
<p:commandLink style="display:none" id="link"
  update="something">

しかし、なぜこのアプローチがうまくいかないのかわかりません..その特定のコンポーネントのクリックイベントがうまくいきません..同じ質問に対して受け入れられた回答を実行しようとしましたが、それがどのように解決するのか理解できませんでした.目的...

私の目的は、検証の成功または失敗の結果に応じて条件付きで更新することです...サポート私は3つのコンポーネントXY Zを持っています..私はこのようなことをしようとしています..

<p:commandLink process="@form" listener="#{foo}" 
      update="if(Validation fail)updateSomething[e.g X and Y] **else** update somethingelse[e.g X  Y and Z]">

より正確には、検証が失敗した場合、XY および Z コンポーネントを更新するよりも、検証が成功した場合にのみ X および Y コンポーネントを更新したいと考えています。

親切に私を助けてください..事前に感謝します。

4

2 に答える 2

13

最初の問題は、そこにある EL 構文が無効であることです。JavaScript コードで"代わりに使用して、属性値を閉じるのが早すぎます。'ネストされた引用符をエスケープするか、代わり\"に使用してください。'

<p:commandLink process="@form" listener="#{foo}" update="somethingElse" 
    oncomplete="if (!args.validationFailed) $('#link').click();">

考えられる 2 番目の問題は、 のクライアント ID<p:commandLink id="link">がまったくない"link"ことです。デフォルトでは、親<h:form>コンポーネントの ID が先頭に追加されます。クライアント ID は、JSF によって生成された HTML 要素 ID です。ウェブブラウザでページを開き、右クリックしてソースを表示して、自分で確認してください。のようになりますid="formId:link"。jQueryセレクターで正確にそのIDを使用する必要があります。

<p:commandLink process="@form" listener="#{foo}" update="somethingElse" 
    oncomplete="if (!args.validationFailed) $('#formId\\:link').click();">

以下も参照してください。


別の方法は、代わりに背後のメソッドで具体的なジョブを実行することlistener="#{foo}"です。

if (!facesContext.isValidationFailed()) {
    RequestContext.getCurrentInstance().update("somethingElse");
}
于 2012-06-15T12:41:53.660 に答える
0

マークされた回答を試しましたが、args には「validationFailed」というパラメーターが含まれていないため、問題は解決しませんでしたが、コントローラーからこのパラメーターを追加する方法を見つけました。

 import org.primefaces.context.RequestContext;

 RequestContext requestContext = RequestContext.getCurrentInstance();
 requestContext.addCallbackParam("validationError", true);
 JSFUtils.displayErrorMessage("My message is here!");

& xhtmlに次のコマンドリンクを追加しました

 <p:commandLink ajax="true" action="#{myController.myMethod}"
 oncomplete="if(args.validationError) alert('Error!');"/>
于 2016-04-13T17:42:19.600 に答える