6

我有一个数据表,我想根据对内容运行的一些分析来更改单元格的颜色。该表链接到一个 Comment 对象数组,我给出了一个 String cssClass,一旦运行分析就会更新。这就是我尝试插入数据表的 rowClasses 属性的方法。它不起作用,我认为问题可能是我无法从数据表声明内部访问为数据表的每一行创建的变量。

数据表代码:

<h:dataTable value="#{post.comments}" var="comment" class="hs-table" rowClasses="#{comment.cssClass}" >
             <h:column>
                   #{comment.name}
             </h:column>
             <h:column>
                   #{comment.email}
             </h:column>
             <h:column>
                   #{comment.msg}
             </h:column>
 </h:dataTable>

评论类:

public class Comment {
private String msg;
private String email;
private String name;
private Date date;
private String cssClass;

public Comment(){
    cssClass = "normColumn";
}
epublic String getCssClass() {
    return cssClass;
}

public void setCssClass(String cssClass) {
    this.cssClass = cssClass;
}

}

在托管 bean 中更新 cssClass 的位置:

if(tone>0)
            c.setCssClass("commentPos");
        else if(tone<0)
            c.setCssClass("commentNeg");

班级永远不会被分配。我做错了什么,或者这根本不可能?

4

1 回答 1

11

在标准的 JSF<h:dataTable>组件中,rowClasses不幸的是,该属性不是按行计算的。它是按表评估的。然而,像 Tomahawk 和 PrimeFaces 这样的组件库支持您在它们<t:dataTable><p:dataTable>.

使用标准 JSF<h:dataTable>组件,您需要提供所有行类的逗号分隔字符串。这看起来像这样:

public String getRowClasses() {
    StringBuilder rowClasses = new StringBuilder();

    for (Comment comment : comments) {
        if (rowClasses.length() > 0) rowClasses.append(",");
        rowClasses.append(comment.getCssClass());
    }

    return rowClasses.toString();
}

然后将其引用为

<h:dataTable ... rowClasses="#{post.rowClasses}">

也可以看看:

于 2012-06-14T18:07:14.410 回答