私はデータテーブルとコレクターを持っています。データテーブルの各行にはボタンがあり、このボタンは対応する行をコレクターに追加します。このデータテーブルに条件付きの色を追加したいと思います。条件は、選択した行がコレクターにあるかどうかです。
<p:dataTable rowStyleClass="#{backingBean.selectedMemberList.contains(aMember) ? 'passive' : 'active'}" style="width: 100%;" id="dTable" var="aMember" value="#{backingBean.memberList}">
<p:column>
...
</p:column>
<p:column>
<p:commandButton id="btn_add" value="Add" update=":mf:op" process=":mf:op_uk">
<p:collector value="#{aMember}" addTo="#{backingBean.selectedMemberList}" />
</p:commandButton>
</p:column>
バッキングビーン:
List<Member> selectedMemberList;
List<Member> memberList;
//getter and setter methods
上記のコードはパッシブスタイルクラスを実行しますが、アクティブスタイルを追加しません。var(リクエストスコープ)をバッキングBeanに渡せないことが原因だと思いました。そこで、値をバッキングBeanの値にバインドしてみました。
<p:dataTable binding="#{backingBean.anotherMember}" rowStyleClass="#{backingBean.selectedMemberList.contains(aMember) ? 'passive' : 'active'}" style="width: 100%;" id="dTable" var="aMember" value="#{backingBean.memberList}">
backingBean:
private Member anotherMember;
//getter and setter methods
しかし、それも機能しませんでした。この問題について誰かが何かアドバイスはありますか?
PrimeFaces ver 2.2.1
編集:cssには次のフィールドが含まれています:
.active{
background-image: none !important;
}
.passive{
background-color:gainsboro !important;
background-image: none !important;
}
編集と解決策:
xhtml:
<p:commandButton action="#{backingBean.checkIfMemberInList(aMember)}" id="btn_add" value="Add" update=":mf:op :mf:op_uk" process=":mf:op_uk">
<p:collector value="#{ukt}" addTo="#{backingBean.selectedMemberList}" />
</p:commandButton>
バッキングビーン:
public boolean checkIfMemberInList(Member aMember){
for(int i=0; i<selectedMemberList.size();i++){
if(selectedMemberList.contains(aMember)){
return true;
}
}
return false;
}