1

コマンドボタンがクリックされたとき、onclick イベントが発生する前にマネージド Bean でメソッドを呼び出して文字列を設定するにはどうすればよいですか? 何を試しても、ボタンがクリックされたときではなく、フォームの更新時にメソッドが呼び出されます。selectColorDlgWidget.show(); によって呼び出されるダイアログで、メソッドに設定された情報を使用できるようにする必要があります。

以下は、primefaces の xhtml coede の抜粋です。

<p:commandButton value="Edit" id="editColorButton" onclick="#{chapUserPrefMB.setPrefTmpKey('CHAP_ColorOneOrMoreCls')}"/>

マネージド Bean のコードは次のとおりです。

public String setPrefTmpKey(String tmpKey) { 
  currentTmpKey = tmpKey.trim();    
  currentTmpValue = getChapUserPrefString(currentTmpKey);
  return "selectColorDlgWidget.show();";
}

私は何を間違っていますか?

4

1 に答える 1

6

あなたは概念的な間違いを犯しています。属性のような値式を取る属性内の EL 式はonclick、JSF による HTML 出力の生成中に呼び出されます。属性の特定のケースではonclick、生成された HTML DOM 要素がクリックされたときではなく (代わりに、JavaScript の一部が実行されます)生成された HTML 出力に既に存在するコード)。アクション イベント中にバッキング Bean メソッドを呼び出したい場合は、action代わりに属性を使用する必要があります。値式の代わりにメソッド式を取ります。

<p:commandButton value="Edit" id="editColorButton"
    action="#{chapUserPrefMB.setPrefTmpKey('CHAP_ColorOneOrMoreCls')}" />

public void setPrefTmpKey(String tmpKey) { 
    currentTmpKey = tmpKey.trim();    
    currentTmpValue = getChapUserPrefString(currentTmpKey);
}

次に、アクションの完了時にダイアログを開くには、次のoncomplete属性を使用します。

<p:commandButton value="Edit" id="editColorButton"
    action="#{chapUserPrefMB.setPrefTmpKey('CHAP_ColorOneOrMoreCls')}"
    oncomplete="selectColorDlgWidget.show()" />
于 2013-09-14T19:02:57.857 に答える