在循环访问集合时将动态 ID 分配给隐藏字段

Assign dynamic ids to hidden fields when iterating over a collection

本文关键字:分配 ID 隐藏 字段 动态 循环 访问 集合      更新时间:2023-09-26

有没有办法为h:inputHidden组件分配动态 ID?

编辑1

我正在尝试在迭代元素集合时分配 ui:repeat 标签内的 id。

无法根据<ui:repeat>的迭代值设置 ID。但无论如何你都不需要它。默认情况下,它们已经根据迭代索引获取动态和唯一 ID。

例如

<h:form id="form">
    <ui:repeat value="#{bean.list}" var="item">
        <h:inputHidden id="hidden" value="#{item.value}" />
    </ui:repeat>
</h:form>

将在视图呈现期间生成此 HTML

<form id="form" name="form">
    <input type="hidden" id="form:0:hidden" name="form:0:hidden" value="item1value" />
    <input type="hidden" id="form:1:hidden" name="form:1:hidden" value="item2value" />
    <input type="hidden" id="form:2:hidden" name="form:2:hidden" value="item3value" />
</form>

如果要手动控制 ID,则需要改用 <c:forEach>,因为<ui:repeat>不会生成多个 JSF 组件,而是允许其子组件(在上面的示例中是单个<h:inputHidden>)多次生成 HTML。该<c:forEach>将生成多个 JSF 组件,然后每个组件仅生成一次 HTML(因此您实际上最终会在 JSF 组件树中得到多个<h:inputHidden>组件)。

例如

<h:form id="form">
    <c:forEach items="#{bean.list}" var="item">
        <h:inputHidden id="#{item.id}" value="#{item.value}" />
    </c:forEach>
</h:form>

这基本上将在视图构建时生成此 JSF 组件树

<h:form id="form">
    <h:inputHidden id="item1id" value="#{bean.list[0].value}" />
    <h:inputHidden id="item2id" value="#{bean.list[1].value}" />
    <h:inputHidden id="item3id" value="#{bean.list[2].value}" />
</h:form>

这反过来将在视图呈现期间生成此 HTML

<form id="form" name="form">
    <input type="hidden" id="form:item1id" name="form:item1id" value="item1value" />
    <input type="hidden" id="form:item2id" name="form:item2id" value="item2value" />
    <input type="hidden" id="form:item3id" name="form:item3id" value="item3value" />
</form>

另请参阅:

  • JSTL in JSF2 Facelets...意义?

默认情况下,系统会为它们分配一个动态 ID。您还可以指定id="#{..}对其进行自定义。

您也可以动态添加任何随机数(id="#{}"),但是

功能相关的ID添加到隐藏组件中,这将很有帮助

例如,如果是员工表格,您可以添加 EMPID 到其中。