【发布时间】:2019-10-31 20:39:33
【问题描述】:
我想使用带有Enum 值的selectOneMenu 下拉菜单。我可以很好地显示这些值,但我无法将选定的值传递回 bean。
枚举
public enum Color {
RED("Red"), BLUE("Blue"), GREEN("Green");
private String label;
private Color(String label) {
this.label = label;
}
public String getLabel() {
return label;
}
}
豆1
@ManagedBean
@ApplicationScoped
public class Data {
public Color[] getColors() {
return Color.values();
}
}
豆2
@ManagedBean(name="bean")
@SessionScoped
public class TestBean {
private Color color;
public Color getColor() {
return color;
}
public void setColor(Color color) {
this.color = color;
}
public void submit() {
System.out.println(color.getLabel());
}
}
xhtml
<h:body>
<h:form>
<h:selectOneMenu value="bean.color">
<f:selectItems value="#{data.colors}" var="color" itemValue="#{color}" itemLabel="#{color.label}"/>
</h:selectOneMenu>
<h:commandButton value="Submit" action="#{bean.submit}" />
</h:form>
<h:outputText value="#{bean.color}" />
</h:body>
在提交时,我在 submit() 函数中得到由 NullPointerException 引起的 500。问题是bean.color 没有使用所选值进行初始化。
我敢肯定这是一些基本的东西......
【问题讨论】:
-
另外,我注意到属性 var 和 itemValue
var="color"itemValue="#{color}" itemLabel="#{color.label}"/> -
谢谢,这里的帖子中缺少空格是格式错误,已更正。至于它从来没有用过:根据这个thread 它应该可以工作,不是吗?
-
啊,明白了。道歉,因为它没有帮助。一件小事,如果它有帮助...
bean.color需要更改为#{bean.color}in<h:selectOneMenu value="bean.color">