1

複合コンポーネント内で を渡そうとすると、f:ajaxすべてのリスナー パラメータが null に解決されます。

<c:forEach var="paragraph" items="#{Chapiter.paragraphList}"> 
  <c:forEach var="field" items="#{paragraph.fieldList}"> 
    <util:inputNumber type="double" value="#{field.value}" decimal="2"> 
        <f:ajax listener="#{myean.doSomething(field, paragraph)}"> 
        </f:ajax>
    </util:inputNumber>
  </c:forEach> 
</c:forEach>

もちろん、このような複合コンポーネントにクライアントの動作を追加しました

リスナー メソッドはぼかしイベントで呼び出されますが、私の引数「フィールド」と「段落」には常に null 値があります。

複合コンポーネントから変数にアクセスできないと思います。

複合属性を介して両方の変数を複合コンポーネントに渡そうとしましたが、それがきれいな解決策であるとは思いません。

これを行う正しい方法はありますか?

ご清聴ありがとうございました。

4

2 に答える 2

0

<c:forEach>ビューのビルド時に実行されるため、paragraphおよびfield変数はビューのビルド時にのみ使用できます。コンポーネント ツリーにアクセスしている間や、ビューのレンダリング時に使用することはできません。ajax アクション リスナー メソッドは、ビューのビルド時ではなく、JSF コンポーネント ツリーのアクセス中に決定されるため、パラメーターは常に解決されますnull

置き換え<c:forEach><ui:repeat>(そして、すべての固有<ui:repeat>の問題が解決された最新の Mojarra バージョンを使用していることを確認して)、Bean をビュー スコープに配置し、ゲッターをビジネス ロジックから解放すると、正常に動作するはずです。

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

于 2013-03-13T14:14:12.013 に答える
0

引数を文字列として渡したい場合は、次のように記述する必要があります。

<f:ajax listener="#{myean.doSomething('arg1', 'arg2')}">

それ以外の場合は、定義された変数であることが期待arg1されます。arg2関数が 2 つの文字列をパラメーターとして受け入れるように定義されていると仮定します。

また、リスナーが実行されると確信していますか? これらの値をどのように取得しようとしていますか。コードを共有してください。

于 2013-03-08T16:08:26.010 に答える