我有一个数据表和一个收集器。数据表中的每一行都有一个按钮,此按钮将相应的行添加到收集器。我想为这个数据表添加条件着色。条件是所选行是否在收集器中。
<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>
支持bean:
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;
}
EDIT&amp;解决方案:
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>
支持bean:
public boolean checkIfMemberInList(Member aMember){
for(int i=0; i<selectedMemberList.size();i++){
if(selectedMemberList.contains(aMember)){
return true;
}
}
return false;
}
答案 0 :(得分:1)
backingBean.selectedMemberList.contains(aMember)
可以一直返回false吗?
如果是的话,
使用backingBean.selectedMemberList.contains(aMember)
“播放”,首先尝试一种方法,如backingBean.checkIfMemberInList(aMember),
boolean checkIfMemberInList(Member iMember){
//iterate over the list and check if object exists , if so return true , otherwise false
}
对象可能不同...... same id does not mean that their hash code is same
...
you might consider override the int hashCode or boolean equals of the member class
修改强>
我对checkIfMemberInList的建议只是让它工作的第一个版本,我真的认为你应该覆盖你的Member类的equals,这样你就可以使用selectedMemberList.contains(memberObj)