6

内容に対して実行される分析に基づいてセルの色を変更したいデータテーブルがあります。このテーブルは、分析が実行されると更新される String cssClass を指定した Comment オブジェクトの配列にリンクされています。これは、データテーブルの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属性は行ごとに評価されません。テーブルごとに評価されます。<t:dataTable>ただし、Tomahawk や PrimeFaces などのコンポーネント ライブラリは、およびで探している種類の属性をサポートしています<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 に答える