1

レンダリング時間タグ(a4j:repeat、ui:repeatなど)を使用して、アイテムのコレクションに基づいてパネルを作成する前。そのすべてが変更されたため、代わりにc:forEachを使用する必要があります。各パネルで、私は多くのAJAX呼び出しとページの部分的な更新を行います。そのため、更新するコンポーネントを識別するためにカスタムIDを使用しています。したがって、私のレンダリング属性は次のようになります。

#{cc.clientId}:pnlRepeat:#{row}:radioAplicar

ここで、pnlRepeatはid属性であり、{#row}は同じタグのrowKeyVar属性です。現在...c:forEachを使用している場合、それらはいずれも存在しないため、重複したid例外が発生します。varStatusを使用して、#{row} Idを使用してパネルを作成できることはわかっていますが、その一方で。JSFは、ID属性にEL式の評価を許可しません。回避策は何ですか?どうもありがとう。

4

1 に答える 1

2

<ui:repeat>またはのような繰り返しコンポーネントの生成されたIDに基づいてManagedBeanロジックまたはEL式を作成しようとしないでください<c:forEach>。すでに述べたように、EL式ではId式を動的に評価できないため、繰り返しコンポーネント内の個々のアイテムによってイベントがトリガーされるこれらの状況に対処する適切な方法は、次の形式で一意の識別値を渡すことです。<f:attribute>タグ。

タグを使用する<f:attribute>と、指定した値がリクエスト属性に追加され、アクションリスナーで取得できるようになります。

<ui:repeat value="..." var="repeatedVar">
  <h:inputText id="newTxt" value="#{repeatedVar}" >
     <f:attribute name="unique_id" value="#{repeatedVar.uniqueId}" />
  </h:inputText>
</ui:repeat>
<h:commandButton actionListener="#{managedBean.someMethod}" ...

また、アクションメソッドでは、動的コンポーネントの属性を取得することで、アクションまたはビジネスロジックを実行する対象を決定できます。

public void someMethod() {
    String uniqueId = (String) UIComponent.getCurrentComponent(FacesContext.getCurrentInstance()).getAttributes().get("unique_id");
    //Get the unique data object
    //Do some business logic and other stuff...
}
于 2012-07-12T11:54:25.087 に答える