我想在<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 selectBoolean复选框id为空。
并得到了这种类型的错误。
我该如何解决?
得到这种类型的错误:
HTTP状态500-不允许id属性为空。
默认情况下,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函数。根据本教程或本答案,您可以创建自己的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设置一个唯一的值,就像我在示例中使用的循环索引一样。
我刚刚在动态id之前放了一个随机名称!像这样:
<h:selectBooleanCheckbox rendered="#{var1[5]}" id="random#{var1[4]}">
然后设置一些你可能使用的东西,比如:
$('#random#{var1[4]}').something();
希望这对你有用!