【发布时间】:2012-05-06 02:04:33
【问题描述】:
有没有办法为h:inputHidden 组件分配动态ID?
EDIT1
在迭代元素集合时,我试图在 ui:repeat 标记内分配 ID。
【问题讨论】:
标签: java javascript jsf primefaces
有没有办法为h:inputHidden 组件分配动态ID?
EDIT1
在迭代元素集合时,我试图在 ui:repeat 标记内分配 ID。
【问题讨论】:
标签: java javascript jsf primefaces
默认情况下,它们会被分配一个动态 ID。也可以指定id="#{..}进行自定义。
【讨论】:
您也可以动态添加任何随机数 (id="#{}"),但是
将功能相关的ID添加到隐藏组件,这会很有帮助
例如,如果是员工表格,可以添加empid。
【讨论】:
无法根据<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>
【讨论】:
xmlns:c="http://java.sun.com/jsp/jstl/core",在 URI 中使用 /jsp。
<h:inputHidden id="#{item.id}" value="#{item.value}" /> 用于 ui:repeat 示例。
<ui:repeat>不能这样设置ID。