显示基于枚举的selectOneMenu项目背景色

时间:2018-10-20 03:22:47

标签: jquery jsf primefaces

我见过this answer,但不确定如何在p:selectOneMenu中显示背景色并带有枚举值的背景。

在下拉菜单中,我想从枚举中获取每个具有不同颜色的项目。

我正在使用PrimeFaces 6.2,所以不确定如何使用建议BalusC on overriding SelectOneMenuRenderer-使用自定义渲染器。

这是我到目前为止尝试过的。

index.xhtml

<h:body>        
<h:form>
    <h:panelGrid id="createPanelGrid" columns="2">
        <p:outputLabel value="Color options:" />
        <p:selectOneMenu value="#{colorBean.selectedColor}" var="sc">
            <f:selectItem itemLabel="Select a color" itemValue="" />
            <f:selectItems value="#{colorBean.colorList}" 
                           var="color" 
                           itemLabel="#{color}" 
                           itemValue="#{color}" />
            <p:column>
                <div style="background-color: #{color};">
                    &nbsp;
                </div>                             
            </p:column>
            <p:column>#{sc}</p:column>
        </p:selectOneMenu>
    </h:panelGrid>
</h:form>
</h:body>

ColorBean.java

import java.io.Serializable;
import javax.inject.Named;
import javax.faces.view.ViewScoped;

@Named("colorBean")
@ViewScoped
public class ColorBean implements Serializable {

private String selectedColor = "White";

public ColorBean() {
}

public ColorsEnum[] getColorList() {
    return ColorsEnum.values();
}

public String getSelectedColor() {
    return selectedColor;
}

public void setSelectedColor(String selectedColor) {
    this.selectedColor = selectedColor;
}
}

ColorsEnum.java

import java.util.ArrayList;
import java.util.List;

public enum ColorsEnum {
WHITE("White"),
RED("Red"),
ORANGE("Orange"),
GREEN("Green"),
BLUE("Blue");

private final String label;

private ColorsEnum(String label) {
    this.label = label;
}

public String getLabel() {
    return this.label;
}

public static final List<String> colorList() {
    List<String> colors = new ArrayList<>();
    colors.add(ColorsEnum.WHITE.label);
    colors.add(ColorsEnum.RED.label);
    colors.add(ColorsEnum.ORANGE.label);
    colors.add(ColorsEnum.GREEN.label);
    colors.add(ColorsEnum.BLUE.label);        
    return colors;
}    
}

0 个答案:

没有答案