【问题标题】:Dynamically set cell/row style jsf 2.0动态设置单元格/行样式 jsf 2.0
【发布时间】:2011-12-20 15:55:01
【问题描述】:

我正在使用 h:datatable,它显示用户在会话中输入的数据的摘要。用户可以自行决定删除表中的行。如果数据符合一定的条件,表格中的特定行必须是红色字体,否则应该是黑色。

到目前为止我尝试过的方法是: - 以编程方式将每列值中 h:outputtext 组件的样式值设置为红色。但这会改变整个列的颜色。 - 以编程方式设置行类,这再次更改所有先前行的样式。

我无法只定位一行或单元格。我考虑过使用 javascript,但没有组件的 id,我不知道如何获取元素。

谢谢。

【问题讨论】:

    标签: jsf datatable


    【解决方案1】:

    使用rowClasses 属性。

    <h:dataTable value="#{bean.items}" var="item" rowClasses="#{bean.rowClasses}">
    

    getRowClasses() 必须返回一个逗号分隔的 CSS 类名称字符串,这些名称将重复应用于行(更具体地说,&lt;tr&gt; 元素)。您可以基于 items 内部 bean 的(post)构造函数、操作方法和/或什至在 getter 内部创建它。

    【讨论】:

    • BalusC,当用户点击按钮触发动作时,表格行被异步添加。所以加载视图时不会加载整个表。因此,用户输入数据,单击按钮第一行被填充。用户再次输入数据并单击按钮,第二行将添加到表中,依此类推。通过使用行类,我必须为每一行添加一个行类,并确保在用户删除一行时删除这些行类。无论如何我都会试一试,看看它是如何工作的。
    • 您是在使用 JSF ajax 还是一些 3rd 方 JavaScript 库/框架?
    • 好吧,那么视图与模型同步,所以我不预见问题。
    • 好的,这就是我尝试过的。在按钮触发的添加行的操作中,比如说“addRows”,我创建了一个 StringBuffer。当数据满足/失败标准时,我将适当的样式类附加到 StringBuffer 并调用 Table.setRowClasses(StringBuffer.toString())。但是最近添加的样式类会覆盖所有其他样式类并使所有行的样式相同。
    • 我还应该提到,该按钮是一个 a4j:commandButton,它使用 render 属性在点击时重新渲染表格。
    【解决方案2】:

    由于某种原因,StringBuffer 被覆盖,这就是未显示更改的原因。我采用了一种更简单的方法,将警报 img 添加到需要修改的行中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-17
      • 2011-09-16
      • 2016-10-19
      • 2011-10-22
      • 1970-01-01
      • 2015-08-01
      • 2012-08-19
      • 1970-01-01
      相关资源
      最近更新 更多