在循环中为h:dataTable生成唯一的id

时间:2012-10-01 10:08:19

标签: jsf jsf-2

我正在使用JSF 2.0。当我试图在h:dataTable的'id'属性中使用变量时,它不会获取该变量值。

我在ui中有h:dataTable:使用id值作为ui:repeat的索引重复,如下所述。

    <ui:repeat var="planMap" value="#{planAccountMap.entrySet().toArray()}" varStatus="planMapStatus">

    <h:dataTable id="planTable#{planMapStatus.index}" value="#{planMap.value}" var="accountList">

是否有人知道我们是否可以在循环中为h:dataTable生成动态ID?

我有一个使用表id的Java脚本,但由于我无法为循环中的每个表创建唯一的id,所以它正在破坏。

3 个答案:

答案 0 :(得分:0)

可重复组件内的任何组件始终具有动态客户端ID。你不能这样做。

也许您可以为dataTable组件分配一个唯一的样式类,并使用jQuery选择器返回ui:repeat中所有dataTable对象的数组。

jQuery('.SomeClass');

答案 1 :(得分:0)

我做的事与你非常相似。我有一个UI:在数据表列内重复。 tbh,如果你检查了火灾bug,你的数据表id将是唯一的,因为你把它放在一个ui:repaet。

planMap:0:yourdatatableID

答案 2 :(得分:0)

通过在数据表中使用数据表可以解决此问题。第二个数据表保存在第一个数据表的列中,如下所示。

<h:dataTable id="outerTable" value="#{planAccountMap.entrySet().toArray()}" var="planMap" width="100%">
  <h:column> 
  <h:dataTable id="planTable" value="#{planMap.value}" var="accountList"
  headerClass="tablehead" 
  rowClasses="'',altrowcoloropt1"
  first="0">
    <h:column>
    <f:facet name="header">
        <h:outputText value="Date" />
    </f:facet>
        <h:outputText value="#{accountList.date}"/>
    </h:column>
    <h:column>
      <f:facet name="header" >
        <h:outputText value="Account Name" />
    </f:facet>
    <h:outputText value="#{accountList.accountName}"/>
  </h:column>
</h:dataTable>
</h:column>
</h:dataTable>

通过这种方式,您可以获得outerTable:0:planTableouterTable:1:planTable的唯一ID。这甚至会将唯一ID扩展到数据表中的每个元素outerTable:1:planTable:1:columnidouterTable:0:planTable:0:columnid