在 h:dataTable 中忽略 JSF 输入 ID
Posted
技术标签:
【中文标题】在 h:dataTable 中忽略 JSF 输入 ID【英文标题】:JSF Input ID ignored inside h:dataTable 【发布时间】:2011-05-21 16:30:51 【问题描述】:我有一个包含动态表单文本字段的简单数据表。每个字段都有一个在支持 bean 中定义的 ID,所以我想使用该 ID 来识别每个 h:inputText 字段。
<h:dataTable id="fieldTable" value="#bean.indexFields" var="item">
<h:column id="column">
<h:inputText id="#item.id" value="#bean.values[item.id]" />
</h:column>
</h:dataTable>
当我尝试查看页面时,JSF 生成错误:The id attribute may not be empty
。
如果我在输入 ID 属性中添加一个常量,它可以工作,但是查看生成的 ID 项目的 ID 不包括在内:
<h:inputText id="#item.idabc" value="#bean.values[item.id]" />
这会生成以下输出:
<table id="form:fieldTable">
<tbody>
<tr>
<td><input id="form:fieldTable:0:abc" type="text" name="form:fieldTable:0:abc" title="" /></td>
</tr>
<tr>
<td><input id="form:fieldTable:1:abc" type="text" name="form:fieldTable:1:abc" title="" /></td>
</tr>
<tr>
<td><input id="form:fieldTable:2:abc" type="text" name="form:fieldTable:2:abc" title="" /></td>
</tr>
</tbody>
</table>
有没有办法将迭代项中的 id 包含在输入 id 属性中?为什么省略了ID?
【问题讨论】:
【参考方案1】:为什么省略ID?
因为视图树中只有一个组件。只有它生成的输出会重复。 #item
在视图构建期间不可用。
为什么需要不同的 ID?只要给它一个固定的ID。 JSF 将注意其在生成的 html 输出中的唯一性。生成的 ID 非常可预测,如果您愿意,您可以通过 javascript 轻松地使用它。
【讨论】:
这是一个很好的观点 - 我不一定关心 ID。我遇到了这个问题,因为我正在使用 ui:composition 生成一个复合控件,其中包含一个标签,后跟一个文本输入字段。复合控件上指定的 ID 用于标签和输入字段(分别为“#idLabel”和“#id”)。以上是关于在 h:dataTable 中忽略 JSF 输入 ID的主要内容,如果未能解决你的问题,请参考以下文章
JSTL c:forEach 在 JSF h:dataTable 中不起作用
如何在没有 JSF 标记库(h:datatable 或 ui:repeat)的情况下编写 <table> 标记,但仍使用 JSF 来控制页面流