我有一个简单的数据表,其中包含动态表单文本字段。每个字段都有一个在辅助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?
答案 0 :(得分:1)
为什么省略ID?
因为视图树中只有一个组件。只有它生成的输出会重复出现。在视图构建期间#{item}
不可用。
为什么需要不同的身份证?只需给它一个固定的ID。 JSF将在生成的HTML输出中关注其唯一性。生成的ID是非常可预测的,如果这是您的意图,您可以通过JavaScript轻松地将其挂钩。