我有一个包含动态表单文本字段的简单数据表。每个字段都有一个在支持 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.id}abc" 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?
最佳答案
Why is the ID omitted?
因为 View 树中只有一个组件。只有它生成的输出才会重复。 #{item}
在 View 构建期间不可用。
为什么需要不同的 ID?只要给它一个固定的ID。 JSF 会注意它在生成的 HTML 输出中的唯一性。生成的 ID 是非常可预测的,如果您有意的话,您可以通过 JavaScript 轻松地 Hook 它。
关于java - 在 h :dataTable 中被忽略的 JSF 输入 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4378636/