没有dataModel的JSF 2 dataTable行索引

Posted

技术标签:

【中文标题】没有dataModel的JSF 2 dataTable行索引【英文标题】:JSF 2 dataTable row index without dataModel 【发布时间】:2013-01-15 23:32:29 【问题描述】:

我一直在使用 ui:repeat 来生成表格。使用 ui:repeat 可以很容易地使用varStatus 对行进行编号。在调用支持 bean 来处理列表导航时,我依赖于 varStatus 中的行 ID,例如在列表中向上或向下移动项目。

现在我想创建一个复合组件,它可以构建一个可自定义的表格,其中包含标记行、向上/向下移动等所需的所有功能。为此,ui:repeat 无法正常工作,因为我做不到查看处理不同列数的方法;我需要在一个地方指定标题,在另一个地方指定正文(而且我还没有达到可以创建自定义组件的知识点)。因此我继续使用数据表,因为使用这意味着将标题指定为与正文内容相同的位置。

效果很好,直到我注意到由于某种原因不再有varStatus。我在不需要datamodel 的情况下在处理列表演示方面做了很多工作,我不想开始使用它。有什么方法可以在不使用datamodel的情况下获取当前行号,因为它显示在表格中?

我也在使用 viewScope,如果我理解正确,这意味着我无法将 dataTable 绑定到 bean。

【问题讨论】:

【参考方案1】:

只需将表绑定到视图本身而不是 bean。

<h:dataTable binding="#table" ...>

然后您可以在必要时使用#table.rowIndex。例如

<h:column>#table.rowIndex + 1</h:column>

请注意,代码是原样的,EL 变量名称 table 完全由您选择。

另见:

How does the 'binding' attribute work in JSF? When and how should it be used?

【讨论】:

我阅读了另一篇文章,您将其作为解决方案,尽管我认为 binding="#table" 是绑定到 bean 的一些简写。我不知道这是可能的。谢谢BalusC! 我的想法和@nivis 完全一样。可能是因为 var 属性的值不需要 EL 语句,但 binding 属性的值需要。我的偏见是 EL 语句中的任何命名值都应该已经声明(由我自己),我觉得给变量命名(例如 tablerowItem)不应该发生在 EL 语句中。 请问table“查看自身”是什么? 我不明白,table.rowIndex 总是在这里 -1。 #table 是什么? @Palo:代码原样。当然&lt;h:column&gt; 必须进入&lt;h:dataTable&gt;。您可以使用任何不存在的变量名称,例如#foo。另见***.com/q/14911158

以上是关于没有dataModel的JSF 2 dataTable行索引的主要内容,如果未能解决你的问题,请参考以下文章

c#中datagridview中datasource反复赋值没有变化?

有没有办法从 datamodel.prisma 文件生成 schema.graphql 文件?

JSF 2 使用 @ManagedProperty 注入 Spring bean/service 而没有 xml

JSF 2全局异常处理,导航到错误页面没有发生

如何通知 ListView DataModel 已更改

复制DataTabe的Rows到另一个DataTable