【问题标题】:How can I give dynamic id to selectBooleanCheckbox in primefaces datatable?如何在 primefaces 数据表中为 selectBooleanCheckbox 提供动态 id?
【发布时间】:2014-05-24 05:58:12
【问题描述】:

我想在<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 is empty。

并得到了这种类型的错误。

我该如何解决?

遇到这种类型的错误:

HTTP 状态 500 - 不允许使用空 id 属性。

【问题讨论】:

  • HTML &lt;center&gt; 标签很久以前就被弃用了。改用 CSS。
  • 你想要像this 这样的复选框来选择行吗?您可以使用&lt;p:column selectionMode="multiple"/&gt;,如展示柜所示。复选框将可用于多行选择。
  • No Tiny 我在所有列中都有许多复选框,并且在从数据库中重新生成的单元格中的特定复选框。所以我想给 id 特别指定那个复选框。
  • 你确定var1在相应的托管bean中被正确初始化了吗?如果不查看相应的 JSF 托管 bean,就很难判断。
  • 这里 var1 没有在 JSF 托管 bean 中定义。 var1 是 变量。

标签: jsf primefaces


【解决方案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 设置一个唯一值,就像我在示例中使用的循环索引一样。

【讨论】:

  • 得到错误:@143,102 id="#{var1[4]+''+rowIndex}" 对于输入字符串:""
  • @R'Skot 我已经更新了我的答案,希望它能解决你的问题。
【解决方案2】:

我刚刚在动态 id 之前放了一个随机名称! 像这样:

<h:selectBooleanCheckbox  rendered="#{var1[5]}" id="random#{var1[4]}">

然后设置一些你可能会用到的东西:

$('#random#{var1[4]}').something();

希望这对你有用!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 2013-05-23
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    相关资源
    最近更新 更多