在JSF中动态更改h:datatable单元格颜色或样式

Web*_*don 6 datatable jsf

我有一个数据表,我想根据对内容运行的一些分析来更改单元格的颜色.该表链接到一个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>
Run Code Online (Sandbox Code Playgroud)

评论类:

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;
}
Run Code Online (Sandbox Code Playgroud)

}

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

if(tone>0)
            c.setCssClass("commentPos");
        else if(tone<0)
            c.setCssClass("commentNeg");
Run Code Online (Sandbox Code Playgroud)

该课程永远不会被分配.我做错了什么,或者这根本不可能?

Bal*_*usC 10

在标准的JSF <h:dataTable>组件中,rowClasses遗憾的是,该属性不是按行计算的.它是基于每个表进行评估的.然而,像战斧和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();
}
Run Code Online (Sandbox Code Playgroud)

然后被引用为

<h:dataTable ... rowClasses="#{post.rowClasses}">
Run Code Online (Sandbox Code Playgroud)

也可以看看: