0

変更時に再レンダリングする h:textInput を取得しようとしています。a4j:ajax と f:ajax で試しました。

a4j:ajax を使用する場合:

<h:panelGroup id="xyzPG">

<ui:repeat var="var" ... >
   ...
  <h:inputText id="#{idController.getIdXYZ(var.id)}" 
   value="#{someModel.value}" 
   size="3" 
   styleClass="#{errorController.getErrorStateStyleId(idController.getIdXYZ())}">
   <a4j:ajax event="change" render="xyzPG" listener="#{listener.doSomeStuff}" />
  </h:inputText> 
  ...
</ui:repeat>  
</h:panelGroup>

これは、パネルがモデルの更新を初めて停止したときにパネルが更新された後、初めて機能し、リスナーも呼び出されません。ただし、レンダリングがトリガーされ、古い値が表示されます。

a4j:ajax を f:ajax に置き換えると、xyzInput 内に ID xyzPG が見つからないというエラー メッセージが表示されます。

<f:ajax event="change" render="@this" listener="#{listener.doSomeStuff}" />

再レンダリングをinputTextに制限しようとすると、常にモデルが更新され、リスナーが呼び出されますが、h:inputTextは再レンダリングされません。

inputText の周りに別の panelGroup を配置しようとしましたが、それもうまくいきませんでした。

h:dataTable を使用しない理由は、次のレイアウトでテーブルを作成する必要があるためです。

---------------------------- 
| dataSet1     | dataSet 2 |
----------------------------
| dataSet3     | dataSet 4 |
etc...

したがって、ui:repeat のオフセットおよびステップ属性を使用しています。

4

2 に答える 2

1
  1. id設計上、次のようなレンダリング時間タグを使用して属性を動的に生成することはできません<ui:repeat/>
  • コンパイル時 V レンダリング時タグ

    ビューの構築と ajax-updates のために、idコンポーネントの は、ビューがレンダリングされる前のビューの構築中に利用可能でなければなりません。<ui:repeat/>子コンポーネントの ID の一意性に対応しています。ただし、ID の制御が必要な場合は、次のようなコンパイル時のタグ ハンドラーを使用する必要があります<c:forEach/>

      <c:forEach items="#{idController.itemsList}" var="theVar">
         <h:inputText id="#{idController.getIdXYZ(theVar.id)}" value="#{someModel.value}" size="3" styleClass="#{errorController.getErrorStateStyleId(idController.getIdXYZ())}">
             <a4j:ajax event="change" render="xyzPG" listener="#{listener.doSomeStuff}" />
         </h:inputText> 
      <c:forEach/>
    
  1. はネーミング コンテナでもあるため、などxyzPGからアクセスできる可能性は低いです。Ajax の更新は Richfaces で機能します。これは、Richfaces がそのようなユース ケースに対して特別な規定を設けているためです。しかし、それを容認しません。の範囲外であるため、そのコンポーネントに到達するには、修飾された命名規則を使用する必要があります。<ui:repeat/><ui:repeat/><h:panelGrid/><f:ajax/>xyzPG<ui:repeat/>

      <f:ajax event="change" render=":form1:xyzPG" listener="#{listener.doSomeStuff}"/>
    

xyzPGこれは、が直接含まれていることを前提としています<h:form id="form1"/>

于 2013-08-16T21:11:02.220 に答える