我想在<p:dataTable>
中将动态ID设置为多个复选框。
请问如何帮助。
<p:column id="sipyes">
<center>
<h:selectBooleanCheckbox rendered="#{var1[5]}" id="#{var1[4]}">
<p:ajax listener="#{pmmbean.checkitem(var1[2],var1[0],var1[3])}"/>
</h:selectBooleanCheckbox><br/>
<h:outputText value="#{var1[4]}" rendered="#{var1[5]}"/>
</center>
</p:column>
在这里,我可以获得var1[4]
的值,但无法在id属性中设置。
这里我得到id selectBooleanCheckbox id为空。
并且遇到了这种类型的错误。
我该如何解决?
遇到这种类型的错误:
HTTP状态500 - 不允许使用空ID属性。
答案 0 :(得分:1)
默认情况下,dataTable
中的所有元素都会采用动态ID,例如:
<h:form id="myForm">
<p:dataTable id="myTable" value="..." var="...">
<p:column>
<h:selectBooleanCheckbox id="firstCheckbox" value="..." />
</p:column>
<p:column>
<h:selectBooleanCheckbox id="secondCheckbox" value="..." />
</p:column>
</p:dataTable>
</h:form>
您的复选框ID将是:
myForm:myTable:0:firstCheckbox
和myForm:myTable:0:secondCheckbox
myForm:myTable:1:firstCheckbox
和myForm:myTable:1:secondCheckbox
等等。
除非您需要自定义ID格式,否则您始终可以创建自己的facelets taglib函数。 基于this tutorial或this answer,您可以创建自己的id生成器方法,它将是这样的:
public static String generateId(String value, Integer index) {
return value + "_" + index;
}
然后在您的页面中使用它:
xmlns:fnc="http://yournamespace.com/fnc"
...
<h:form id="myForm">
<p:dataTable id="myTable" value="..." var="item" rowIndexVar="index">
<p:column>
<h:selectBooleanCheckbox id="#{fnc:generateId(item.name, index)}" value="..." />
</p:column>
</p:dataTable>
</h:form>
请确保通过为每个ID设置唯一值来避免重复ID,就像我在我的示例中使用了循环索引一样。
答案 1 :(得分:-1)
我刚刚在动态ID之前添加了一个随机名称! 像这样:
<h:selectBooleanCheckbox rendered="#{var1[5]}" id="random#{var1[4]}">
然后设置一些你可能会使用的东西:
$('#random#{var1[4]}').something();
希望这适合你!