为primefaces数据表中的部分文本赋予样式

时间:2013-08-27 09:26:07

标签: primefaces datatable

我想更改数据表中的数据颜色。

例如: a有两个值... 64和64。

a:64

  64

b有两个值60和65

b:60

  65



<p:dataTable  var="someclass" value="#{someBean.someclass}">
<p:column headerText="DEVICE" >
<h:outputText value="#{someclass.somemember}" />
</p:column> 
<p:column headerText="PATH">
<h:outputText value="#{someclass.somemember}" />                              
</p:column>
</p:dataTable>

如果'a'有两个相等的值,那么它应该以一种颜色显示,否则如果值不同,我需要不同颜色的数据。

如何使用primefaces数据表?

有没有其他方法可以使用primefaces(没有数据表)来实现这个目的?

他是我希望我的表达方式如何.......

if {#some.path eq“paths installed”}&amp;&amp; some.path + 1 eq“使用的路径”} 然后 {if(#(some.path.substringAfter(':')eq(#(some.path + 1.substringAfter(':')

...如何使用jsf进行此操作?

1 个答案:

答案 0 :(得分:0)

这是你需要的最多,至少你可以得到一般的想法...

你的xhtml应该是这样的:

<p:dataTable  var="myLittleWrapper" value="#{myBean.modified}">
    <p:column headerText="PATH">
        <h:outputText value="#{myLittleWrapper.myObject.path}" styleClass="#{(myLittleWrapper.colorMe)?'equalMembers':''}"/>                              
    </p:column>
...

创建以下方法(从您@PostConstruct调用)

List<MyObject> original = new ArrayList<MyObject>();//fill it with data
List<MyObjectWrapper> modified = new ArrayList<MyObjectWrapper>();// + getter/setter

public void prepareModifiedList() {

    ListIterator<MyObject> myListIter = original.listIterator();

    while (myListIter.hasNext()) {
        MyObject myObj = myListIter.next();
        MyObject nextMyObj = null;
        boolean colorMe = false;
        try {
            nextMyObj = peek(myListIter);
        } catch (NoSuchElementException e) {
        }
        if (nextMyObj != null && myObj.getPath().equals(nextMyObj.getPath())) {
            colorMe = true;
        }
        MyObjectWrapper myObjectWrapper = new MyObjectWrapper(myObj, colorMe);
        modified.add(myObjectWrapper);

    }
}

peek方法如下所示:

public <T> T peek(ListIterator<T> iter) throws NoSuchElementException {
    T obj = iter.next();
    iter.previous();
    return obj;
}

MyObjectMyObjectWrapper看起来像这样

public class MyObject {

    public MyObject(String path) {
        super();
        this.path = path;
    }

    private String path;

    public String getPath() {
        return path;
    }

    public void setPath(String path) {
        this.path = path;
    }
}

public class MyObjectWrapper {
    MyObject myObject;

    boolean colorMe;

    public MyObjectWrapper(MyObject myObject, boolean colorMe) {
        super();
        this.myObject = myObject;
        this.colorMe = colorMe;
    }

    public MyObject getMyObject() {
        return myObject;
    }

    public void setMyObject(MyObject myObject) {
        this.myObject = myObject;
    }

    public boolean isColorMe() {
        return colorMe;
    }

    public void setColorMe(boolean colorMe) {
        this.colorMe = colorMe;
    }

}

如果我理解你,你可以这样做:

<h:outputText value="#{someclass.somemember}" 
    styleClass="#{(someclass.someMember eq someclass.someOtherMember)?'equalMembers':''}"/>

在你的css中添加

.equalMembers {
    color:red;
}