【问题标题】:How access Primefaces DataTable Rows from Java如何从 Java 访问 Primefaces DataTable Rows
【发布时间】:2017-07-26 13:15:18
【问题描述】:

我想从 Java 中的 PrimeFaces DataTable 组件中获取不同的行。我可以使用 findComponent 从 ViewRoot 中找到 DataTable。现在,当我查看组件(使用调试器)时,我可以看到 3 个孩子,孩子们。这些子项是我的数据表第一行中的 3 列,但我无法访问其他行。

我的 XHTML 表结构如下:(示例)

<h:form id="form">
     <p:dataTable id="table" var="t">
          <p:column>
               <p:inputNumber id="inputOne" />
          </p:column>
          <p:column>
               <p:inputNumber id="inputTwo" />
          </p:column>
          <p:column>
               <p:inputNumber id="inputThree" />
          </p:column>
     </p:dataTable>
</h:form>

这就是我在 Java 代码中获取 DataTable 的方式:

final DataTable table = (DataTable) getFacesContext().getViewRoot().findComponent("form:table");

table.getChildren(); // 3 Children, even if the DataTable got 10 Rows.

如何访问 DataTable 中的其他行?我只得到第一行中的 3 列作为子项。

试图通过调试器尽可能地进行,但我找不到其他行/组件。

【问题讨论】:

  • 相反的方法呢:用Java为表准备数据模型,并且可以完全访问任何行中的任何字段?
  • DataModel 要复杂得多并且已经实现,我只需要 Java 中的组件将它们设置为“无效”( .setValid(false) ),以将它们显示为无效字段。我不能使用验证器标签,因为验证是由外部服务完成的。
  • 即使我没有使用这种方法,它也应该可以工作:你必须在你的支持 bean 中定义一个 org.primefaces.component.datatable.DataTable 类型的属性,然后使用绑定属性。通过这个新属性,您可以在支持 bean 中访问行值。请查看DataTable文档以检查正确的方法primefaces.org/docs/api/5.0/org/primefaces/component/datatable/…
  • 绑定元素有效,但我仍然没有得到我需要的行。我只找到第一行和第一列。得到了和我的例子一样的元素。

标签: java jsf primefaces datatable


【解决方案1】:

我认为你可以使用 p:dataTable 的rowIndexVar="rowId" 属性。您可以使用它来传递所选行的 id。

您可以添加带有链接的列以使该行“无效”:

<p:column>
   <h:commandLink action="#{managedBeanActionToMakeRowInvalid}">
     <f:param name="rowIndex" value="#{rowId}" />
   </h:commandLink>
</p:column>

【讨论】:

    猜你喜欢
    • 2014-02-18
    • 2014-08-29
    • 1970-01-01
    • 2013-01-19
    • 2014-04-12
    • 2016-04-09
    • 2012-10-01
    • 1970-01-01
    • 2014-05-19
    相关资源
    最近更新 更多