use*_*625 2 jsf enums selectonemenu
我是关于开发一个小型的jsf项目,我到了一个状态,我必须在枚举类型中存储一个值,但无法弄清楚如何处理
所以我在这里发布我的问题的一个小描述:
这是枚举类型:
package com.enumeration;
import java.io.Serializable;
public enum Gender implements Serializable{
Male('M'), Female('F');
private char description;
private Gender(char description) {
this.description = description;
}
public char getDescription() {
return description;
}
Run Code Online (Sandbox Code Playgroud)
}
xhtml页面:
<h:panelGrid columns="2">
<h:outputLabel value="Nom:" for="nom" />
<h:inputText id="nom" value="#{employee.newEmployee.nom}" title="Nom" />
<h:outputLabel value="Gender:" for="gender" />
<h:selectOneMenu value="#{employeeBean.newEmployee.gender}" id="gender">
<f:selectItem itemLabel="Male" itemValue="Male" />
<f:selectItem itemLabel="Female" itemValue="Female"/>
</h:selectOneMenu>
</h:panelGrid>
<h:commandButton value="ajouter" action="index.xhtml" actionListener="#{employeeBean.ajouter}" />
</h:form>
Run Code Online (Sandbox Code Playgroud)
问题是,当我尝试向数据库添加一个新行时,jsf抛出错误: j_idt7:性别:'男性'必须可转换为枚举.
我在网上做了一些搜索,但无法理解解决方案请帮忙谢谢
你的问题是你的<f:selectItem>指定字符串,而在<h:selectItem value="#{employeeBean.newEmployee.gender}">似乎返回两个Gender枚举之一.
只要你将相同的值粘贴到两者中,枚举就是AFAIK直接可转换而无需转换器.
这是/ a模式:
<h:selectOneMenu value="#{employeeBean.newEmployee.gender}" id="gender">
<f:selectItems value="#{enumValuesProvider.genders}"
var="gender"
itemValue="#{gender}"
itemLabel="#{gender.name()}" />
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)
注意,我在<f:selectItems>这里使用.问题是,您不能直接从JSF页面获取值.你需要一个专门的bean来完成这项工作:
@Named // or @ManagedBean if you're not using CDI
@ViewScoped // or @RequestScoped
public EnumValuesProvider implements Serializable
{
public Gender[] getGenders()
{
return Gender.values();
}
}
Run Code Online (Sandbox Code Playgroud)
这是在没有任何测试的情况下写下来的.没有保证.
| 归档时间: |
|
| 查看次数: |
10718 次 |
| 最近记录: |