【问题标题】:JSF 2: duplicate IDs inside p:dataListJSF 2:p:dataList 中的重复 ID
【发布时间】:2012-04-24 10:15:45
【问题描述】:

我有每个客户的可计费服务列表,我正在尝试构建一个表格,用户可以在其中选择哪些服务应该实际计费:

<p:dataList value="#{billController.billings}" var="billings">
    <p:dataTable value='#{billings.billablesDataModel}' var='item' selection="#{billings.toBill}">
        <f:facet name="header"> 
            <h:outputText value="#{billings.client.id}" />
        </f:facet>

        [...]

    </p:dataTable>
</p:dataList>

问题在于,所有数据表都使用由 JSF 自动分配的相同 ID 属性 (j_idt9:j_idt13:0:j_idt14) 呈现。我怀疑这导致选择不起作用。 (支持 bean billings.toBill 未更新/保持为空。)

我试图像这样手动设置dataTable 的 ID 属性:

<p:dataTable id="#{billings.client.id}" ...>

但是,我收到以下错误:

java.lang.IllegalArgumentException: Empty id attribute is not allowed

#{billings.client.id} 绝对设置为唯一客户端的 ID,因为我从 h:outputText 获得正确的输出以用于调试目的。)

你能帮我解决这个问题吗?

我在 Tomcat 6 上使用 JSF Mojarra 2.1.1 和 PrimeFaces 3.2。

【问题讨论】:

    标签: jsf jsf-2 primefaces facelets mojarra


    【解决方案1】:

    您需要将 p:column 用于 datalist 的内容,如用户指南中所述。

    【讨论】:

    • 这对我有类似的问题。将列添加到 DataList(不是示例中使用的 DataTable,我相信它也需要一列)有效。但据我所知,用户指南中 DataList 部分的任何地方都没有提到它。
    • 太棒了,这行得通!我遵循了缺少 p:column 的 datalist 展示示例。我在用户指南中也找不到它。总之,非常感谢!
    【解决方案2】:

    如果您通过ui:repeat 而不是通过p:dataList 循环billController.billings 会怎样:

    <ui:repeat var="billings" value="#{billController.billings}">
        <p:dataTable value="#{billings.billablesDataModel}" var="item" selection="#{billings.toBill}">
            [...]
        </p:dataTable>
    </ui:repeat>
    

    【讨论】:

    • ui:repeat 提供完全相同的结果。
    猜你喜欢
    • 1970-01-01
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 2017-01-27
    • 2016-11-18
    • 2016-01-13
    • 2013-05-29
    • 1970-01-01
    相关资源
    最近更新 更多