【问题标题】:Giving style to a part of text in primefaces datatables为primefaces数据表中的部分文本赋予样式
【发布时间】:2013-08-27 09:26:06
【问题描述】:

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

例如: 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 "安装的路径"} && some.path+1 eq "使用的路径)} 然后 {if(#(some.path.substringAfter(':') eq (#(some.path+1.substringAfter(':'))

...如何使用 jsf 给出这个?

【问题讨论】:

  • 显示您的相关p:datatable 代码,p:column 内容
  • 我已经编辑了内容。请检查一下
  • 你的意思是如果 DEVICE 成员等于 PATH 成员?
  • 没有丹。对于特定的设备,会有很多路径。如果 DEVICE 的后续 PATH 编号相同,则必须进行颜色更改。
  • 这样吧。忘记设备的事情。我们有很多 PATH 是一个列表并存储在一个 bean 中。我们必须一次检查两个路径,如果颜色相同,则更改颜色。 (PS:必须比较第一和第二路径,然后是第三和第四,然后是第五和第六)

标签: primefaces datatable


【解决方案1】:

这里是你最需要的,至少你可以大致了解一下......

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

【讨论】:

  • 非常感谢丹。我几乎明白了。路径:12 23 34 45。在下一行有:12 23 34 56 ..接下来的 3 n 4 行将有不同数据的路径。我将得到的数据是整个句子。我的意思是“路径:12 23 34 45。”。所以我只需要在冒号 (:) 之后取数据,然后比较。
猜你喜欢
  • 2016-11-23
  • 1970-01-01
  • 1970-01-01
  • 2013-03-12
  • 1970-01-01
  • 1970-01-01
  • 2012-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多