【问题标题】:Conditional Coloring of Datatable in PF or var vs binding tags in a datatablePF 或 var 中数据表的条件着色与数据表中的绑定标签
【发布时间】:2012-04-09 08:13:42
【问题描述】:

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

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

支持 bean:

public boolean checkIfMemberInList(Member aMember){       
        for(int i=0; i<selectedMemberList.size();i++){            
            if(selectedMemberList.contains(aMember)){ 
                return true;
            }
        }
        return false;
    }

【问题讨论】:

  • 这个 rowStyleClass="#{(backingBean.selectedMemberList.contains(aMember))?'passive':'active'}" 对你有用吗(添加了额外的括号)?
  • 你的班级有没有 !important 的背景颜色,像这样?背景颜色:#6CE26C !重要;背景图像:无!重要;颜色:#000000 !important;
  • 是的,我添加了相关的css内容..

标签: java datatable primefaces


【解决方案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()

【讨论】:

  • 我“玩”了支持 bean 方法,还添加了更改命令按钮的更新属性,比它起作用了!感谢你的回答。我添加了最终版本,以防其他人需要它..
  • 编辑了我的答案...顺便说一句,您的循环没有意义...您在循环内部迭代 selectedUyeKasaList 时您没有引用它...
  • 对不起,为了使我的帖子更具可读性,我更改了变量的名称。我忘了改那个,现在我更正了。
猜你喜欢
  • 2014-11-23
  • 2017-12-28
  • 2012-03-10
  • 2012-02-03
  • 1970-01-01
  • 2017-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多