我遇到了两天的问题。我无处可去 我的问题是根据列表中的选定元素在面板中制作动态内容:selectOneMenu
<h:outputLabel value="Categorie :" />
<p:selectOneMenu value="#{composantbean.selectedCategoryId}" required="true" >
<f:selectItem itemLabel="Select categorie" itemValue="" />
<f:selectItems value="#{composantbean.listcat}" var="cat" itemValue="#{cat.nomCat}" itemLabel="#{cat.nomCat}" />
<p:ajax update="panl" event="change" listener="#{composantbean.catListener()}"/>
</p:selectOneMenu>
<p:panel id="panl" header ="Caracteristique selon la categorie" toggleable="true" rendered="true" >
<h:panelGrid id="panlecart" columns="2" cellpadding="5" rendered="true">
<c:forEach items="#{composantbean.categorie.proprietes}" var="var">
<h:outputText value="#{var.nomProp}"/>
<h:inputText value="" />
</c:forEach>
</h:panelGrid>
</p:panel>
内容显示这是真的,但不幸的是它不同步显示移位
但是如果我使用另一个<p: selectOneMenu id = "panel"
内容会显示并同步
答案 0 :(得分:1)
正如Lucas所说,在JSF中使用c:foreach(以及所有类型的JSTL)是一个坏主意,尤其是使用ajax。 以下是您应该阅读的参考资料,以了解有关JSF中JSTL的更多信息:
使用ui:在h中重复:不建议使用panelGrid。您可以阅读讨论here。
所以,恕我直言,您应该尝试另一种方法,例如使用dataTable,如上面的链接所述 或者,你可以使用html的表格标签(&lt; table&gt;)作为h:panelGrid的替换,在ui:repeat中使用html的tr和td标签。例如:
<h:outputLabel value="Categorie :" />
<p:selectOneMenu value="#{composantbean.selectedCategoryId}" required="true" >
<f:selectItem itemLabel="Select categorie" itemValue="" />
<f:selectItems value="#{composantbean.listcat}" var="cat" itemValue="#{cat.nomCat}" itemLabel="#{cat.nomCat}" />
<p:ajax update="panl" event="change" listener="#{composantbean.catListener()}"/>
</p:selectOneMenu>
<p:panel id="panl" header ="Caracteristique selon la categorie" toggleable="true" rendered="true" >
<table>
<ui:repeat value="#{composantbean.categorie.proprietes}" var="var">
<tr>
<td><h:outputText value="#{var.nomProp}" /></td>
<td><h:inputText value="" /></td>
</tr>
</ui:repeat>
</table>
</p:panel>