私は過去 2 日間、これに本当に悩まされており、Primefaces が ID に基づいてクライアントの UI コンポーネントを更新する方法を理解するのに苦労しています。
私は ah:selectOneMenu を持っており、表示されるパネルの数をカウントしています。各 p:panel には、多数のフォーム要素を持つ panelGrid が含まれます。ドロップダウンの onchange イベントが発生し、Managed Bean でカウントを確認できます。ただし、クライアント側でパネルが動的に増加することはありません。p:ajax パラメーターに何か問題があると思いますが、それがどのように機能するかを完全には理解していません。関連するコードは次のとおりです。
<h:selectOneMenu id="numapps" value="#{mbean.appCount}">
<f:selectItem itemLabel="1" itemValue="1" />
<f:selectItem itemLabel="2" itemValue="2" />
<f:selectItem itemLabel="3" itemValue="3" />
<f:selectItem itemLabel="4" itemValue="4" />
<f:selectItem itemLabel="5" itemValue="5" />
<p:ajax update="appsContainer" event="change"
listener="#{mbean.onChangeNumApps()}" />
</h:selectOneMenu>
<p:panel id="appsContainer" >
<p:panel header="Application" id="appsPane" value="#{mbean.submittedApps}" var="app" multiple="true">
submitApps は、パネル フォーム要素を含むリストです。これが私のmbeanリスナーです:
public void onChangeNumApps()
{
List<Apps> c = new ArrayList<Apps>();
logger.info("on change event fired");
logger.info("new value is "+mbean.getAppCount());
for (int i=0;i < mbean.getAppCount();i++)
{
c.add(new App());
}
mbean.setSubmittedApps(c);
}
何らかの理由で p:selectone を動作させることができなかったため、p:ajax と h:selectone を混在させています。