java - 在 h :dataTable 中被忽略的 JSF 输入 ID

标签 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?

最佳答案

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/

相关文章:

html - Django 中的分页 + Ajax 表

java - 从 Java 程序访问 NFS 共享

java - Android 中声音剪辑结束后如何禁用另一个按钮?

java - 我不知道如何使用 printf 缩进

jsf - JSF国际化,什么时候使用message-bundle和resource-bundle?

jsf - 如何有条件地渲染<f:facet>?

java - 动态添加 Primefaces 组件

css - 覆盖数据表 css

javascript - 在 rowEdit ajax 事件中获取 rowIndex

Java 日历 : Getting Difference Between Two Dates/Times - Off by One