【问题标题】:Different colors of options in selectOneMenu (Primefaces)selectOneMenu(Primefaces)中不同颜色的选项
【发布时间】:2013-10-24 13:55:26
【问题描述】:

我需要在 Primefaces 中显示不同颜色的选项。

我有一个带有动态项目(列表)的 selectOneMenu

<p:selectOneMenu id="carMenu" style="margin-top:4px;"
    value="#{Bean.selectedCar}" effect="fade"
    autoupdate="true">
    <f:selectItems id="carsId"
        value="#{myBean.allCars}" var="carItems"
        itemLabel="#{carItems.name}" itemValue="#{carItems}" />
</p:selectOneMenu>
 private List<Cars> allCars;

如果汽车已售出,我需要显示选项 RED 的背景,否则显示 BLACK。在我的模型中,我有一个属性,如果汽车是否售出,它会返回值(布尔值已售出)。

如何在我的 selectOneMenu 中设置颜色?

【问题讨论】:

  • 谢谢,删除我的评论。您可以删除 yoursto 以保持一切清洁

标签: jsf jsf-2 primefaces selectonemenu


【解决方案1】:

解决方案是在 PrimeFaces 4.0 及更高版本中使用“高级”方式显示此内容。

您可以将f:selectItems 标记与p:column 标记组合为p:selectOneMenu(请参阅the showcase),并为列本身使用迭代var,就像在表格中一样。

那么理想的做法是根据条件将styleClass 设置为整个列,但不幸的是它不起作用。幸运的是,添加一些 Javascript/jQuery 代码可以实现您的目标,请查看SSCCE

XHTML 页面

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui" style="height: 400px;">
<h:head>
    <style type="text/css">
red-background {
    //Empty, used just as a reference to set the style with jQuery
}
</style>
</h:head>
<h:body>
    <h:form>
        <p:commandButton action="#{bean.send}" value="Send" ajax="false" />
        <p:selectOneMenu id="carMenu" style="margin-top:4px;"
            value="#{bean.selectedCar}" effect="fade" autoupdate="true" var="car"
            converter="omnifaces.SelectItemsConverter" onchange="setSelectionColor();">
            <f:selectItems id="carsId" value="#{bean.allCars}" var="carItem"
                itemLabel="#{carItem.name}" itemValue="#{carItem}" />
            <p:column>
                <h:outputText value="#{car.name}"
                    styleClass="#{car.sold ? 'red-background' : ''}" />
            </p:column>
        </p:selectOneMenu>
    </h:form>
    <script>
        $(document).ready(function() {
            //Set red background for the options (not for td, but for its parent tr)
            $(".red-background").parent().css( "background-color", "red" );
            setSelectionColor();
        });
        function setSelectionColor(){
            //Check if the selected value has a red background 
            //(active and red-background styles altogether), 
            //if true, set the selectonemenu label to red too
            if($(".ui-state-active .red-background").size() > 0){
                $(".ui-selectonemenu-label").css( "background-color", "red" );
            }else{
                $(".ui-selectonemenu-label").css( "background-color", "white" );
            }
        }
    </script>
</h:body>
</html>

Bean.java

@ManagedBean
@ViewScoped
public class Bean implements Serializable {

    public class Car implements Serializable {
        String name;
        boolean sold;

        public Car(String name, boolean sold) {
            this.name = name;
            this.sold = sold;
        }

        public String getName() {
            return name;
        }

        public boolean isSold() {
            return sold;
        }
    }

    private List<Car> allCars = Arrays.asList(new Car("Audi", true), new Car(
            "Mercedes", false));

    public List<Car> getAllCars() {
        return allCars;
    }

    private Car selectedCar;

    public Car getSelectedCar() {
        return selectedCar;
    }

    public void setSelectedCar(Car selectedCar) {
        this.selectedCar = selectedCar;
    }

    public void send() {
        System.out.println("Sent " + selectedCar.name);
    }

}

您可能还对只设置字体颜色而不是背景感兴趣:

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui">
<h:head>
    <style type="text/css">
.red-font {
    color: red;
}
</style>
</h:head>
<h:body>
    <h:form>
        <p:commandButton action="#{bean.send}" value="Send" ajax="false" />
        <p:selectOneMenu id="carMenu" style="margin-top:4px;"
            value="#{bean.selectedCar}" effect="fade" autoupdate="true"
            var="car"
            converter="omnifaces.SelectItemsConverter">
            <f:selectItems id="carsId" value="#{bean.allCars}" var="carItems"
                itemLabel="#{carItems.name}" itemValue="#{carItems}" />
            <p:column>
                <h:outputText styleClass="#{car.sold ? 'red-font' : ''}"
                    value="#{car.name}" />
            </p:column>
        </p:selectOneMenu>
    </h:form>
</h:body>
</html>

【讨论】:

    猜你喜欢
    • 2011-09-29
    • 1970-01-01
    • 2015-03-04
    • 1970-01-01
    • 2015-04-28
    • 2013-01-20
    • 1970-01-01
    • 2014-08-02
    • 2023-04-07
    相关资源
    最近更新 更多