数据表中PF或var vs绑定标记中数据表的条件着色

时间:2012-04-09 08:13:42

标签: java datatable primefaces

我有一个数据表和一个收集器。数据表中的每一行都有一个按钮,此按钮将相应的行添加到收集器。我想为这个数据表添加条件着色。条件是所选行是否在收集器中。

<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;
    }

1 个答案:

答案 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)

Implementing hashCode() and equals()