在h:dataTable中忽略了JSF输入ID

时间:2010-12-07 15:55:27

标签: java jsf datatable facelets

我有一个简单的数据表,其中包含动态表单文本字段。每个字段都有一个在辅助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?

1 个答案:

答案 0 :(得分:1)

  

为什么省略ID?

因为视图树中只有一个组件。只有它生成的输出会重复出现。在视图构建期间#{item}不可用。

为什么需要不同的身份证?只需给它一个固定的ID。 JSF将在生成的HTML输出中关注其唯一性。生成的ID是非常可预测的,如果这是您的意图,您可以通过JavaScript轻松地将其挂钩。