【问题标题】:JSF Input ID ignored inside h:dataTable在 h:dataTable 中忽略 JSF 输入 ID
【发布时间】: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.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?

【问题讨论】:

    标签: java jsf datatable facelets


    【解决方案1】:

    为什么省略ID?

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

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

    【讨论】:

    • 这是一个很好的观点 - 我不一定关心 ID。我遇到了这个问题,因为我正在使用 ui:composition 生成一个复合控件,其中包含一个标签,后跟一个文本输入字段。复合控件上指定的 ID 用于标签和输入字段(分别为“#{id}Label”和“#{id}”)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 2011-04-24
    • 1970-01-01
    • 2013-09-01
    相关资源
    最近更新 更多