在过去的两天里,我真的被这个问题困扰着,并且正在努力理解 Primefaces 如何根据他们的 ID 更新客户端上的 UI 组件。
我有 ah:selectOneMenu 计数要显示的面板数量。每个 p:panel 都将包含一个带有许多表单元素的 panelGrid。下拉菜单上的 onchange 事件被触发,我可以在托管 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:ajax 与 h:selectone 混合,因为由于某种原因我无法让 p:selectone 工作 - 可能是由于 CSS 与我的样式表发生冲突?