0

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

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

支持豆:

private Member anotherMember;
//getter and setter methods

但它也没有工作。有人对这个问题有任何建议吗?

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

1 回答 1

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)

实现 hashCode() 和 equals()

于 2012-04-09T12:30:47.977 回答