【问题标题】:Generate unique id for h:dataTable in the loop在循环中为 h:dataTable 生成唯一 id
【发布时间】:2012-09-22 04:25:26
【问题描述】:

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

我在 ui:repeat 中有 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,因此它会中断。

【问题讨论】:

  • 组件将根据UIComponent.getClientId指定的规则发出一个客户端标识符
  • 感谢大家的研究和回复。我已经通过在数据表中使用数据表解决了这个问题,如下所示。 &lt;h:dataTable id="outerTable" value="#{planAccountMap.entrySet().toArray()}" var="planMap"&gt; &lt;h:dataTable id="planTable" value="#{planMap.value}" var="accountList"&gt; 。通过这个,我得到了唯一 id 为 outerTable:0:planTable,outerTable:1:planTable...这甚至将唯一 id 扩展到数据表中的每个元素,如 outerTable:1:planTable:1:columnid,outerTable:0:planTable:0:columnid

标签: jsf jsf-2


【解决方案1】:

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

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

jQuery('.SomeClass');

【讨论】:

    【解决方案2】:

    我做的事情和你很相似。我有一个 UI:在数据表列中重复。 tbh,如果您签入 fire bug,您的数据表 id 将是唯一的,因为您将其放在 ui:repaet 中。

    planMap:0:yourdatatableID
    

    【讨论】:

    • 这可能是一种解决方案,但在我的情况下,我有多个格式不同的列,所以我宁愿只使用数据表。现在我在数据表中使用数据表,效果很好。
    【解决方案3】:

    这个问题可以通过在datatable里面使用datatable来解决。第二个数据表保存在第一个数据表的列内,如下所示。

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

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

    【讨论】:

      猜你喜欢
      • 2015-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-21
      • 1970-01-01
      • 2020-05-25
      • 2012-03-21
      • 2012-07-20
      相关资源
      最近更新 更多