我见过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};">
</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;
}
}