JSF 2:p:dataList中的重复ID

时间:2012-04-24 10:15:45

标签: jsf jsf-2 primefaces facelets mojarra

我有一个每个客户的可计费服务列表,我正在尝试建立一个表,用户可以选择实际收费的表:

<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>

问题是,所有dataTable都使用由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。

2 个答案:

答案 0 :(得分:4)

您需要使用p:列作为用户指南中记录的datalist内容。

答案 1 :(得分:0)

如果您通过billController.billings而不是ui:repeat循环遍历p:dataList该怎么办:

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