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

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

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

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

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

【问题讨论】:

    标签: jsf jsf-2 datatable uirepeat


    【解决方案1】:

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

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

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

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

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

    另见:

    【讨论】:

    • 我阅读了另一篇文章,您将其作为解决方案,尽管我认为 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}。另见stackoverflow.com/q/14911158
    猜你喜欢
    • 2012-02-05
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    • 2012-03-21
    • 2011-09-17
    • 2014-09-27
    • 2014-04-14
    • 1970-01-01
    相关资源
    最近更新 更多