如何在primefaces数据表中为selectBooleanCheckbox提供动态id?

时间:2014-04-10 13:32:01

标签: jsf primefaces

我想在<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属性。

2 个答案:

答案 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:firstCheckboxmyForm:myTable:0:secondCheckbox
  • 第二行myForm:myTable:1:firstCheckboxmyForm:myTable:1:secondCheckbox

等等。

除非您需要自定义ID格式,否则您始终可以创建自己的facelets taglib函数。 基于this tutorialthis 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();

希望这适合你!