Jsf 如何在p:selectOneMenu中使用枚举
在我的JSF/PrimeFaces迷你web项目中,我想使用下拉列表选择枚举项,然后在填写“创建”表单时将它们添加到数据库中。Jsf 如何在p:selectOneMenu中使用枚举,jsf,primefaces,enums,Jsf,Primefaces,Enums,在我的JSF/PrimeFaces迷你web项目中,我想使用下拉列表选择枚举项,然后在填写“创建”表单时将它们添加到数据库中。 我使用Netbeans从数据库创建一个实体类,然后使用向导“来自实体类的JSF页面”,使用PrimeFaces作为模板。这将自动创建创建/编辑/列出/查看xhtml页面。 目前我有: 枚举类: public enum InterestsEnum { FOOTBALL, SKIING, CYCLING, MUSIC; }
我使用Netbeans从数据库创建一个实体类,然后使用向导“来自实体类的JSF页面”,使用PrimeFaces作为模板。这将自动创建创建/编辑/列出/查看xhtml页面。 目前我有: 枚举类:
public enum InterestsEnum {
FOOTBALL,
SKIING,
CYCLING,
MUSIC;
}
@Entity
public class Person implements Serializable {
@Column(name="ID")
@Id
@NotNull
@GeneratedValue(strategy = GenerationType.AUTO)
private Long personId;
@Column(name="FIRSTNAME")
@Basic(optional=false)
@NotNull
@Size(min=1,max=45)
private String firstName;
@Column(name="SURNAME")
@Basic(optional=false)
@NotNull
@Size(min=1,max=45)
private String surname;
@ElementCollection(fetch = FetchType.EAGER, targetClass = InterestsEnum.class)
@JoinTable(name = "Person_INTERESTS", joinColumns = @JoinColumn(name = "PERSON_ID"))
@Column(name = "INTERESTS", nullable = false)
@Enumerated(EnumType.STRING)
Collection<InterestsEnum> interests;
//Getters and Setters:
@ManagedBean
@ApplicationScoped
public class Data {
public InterestsEnum[] getInterests() {
return InterestsEnum.values();
}
}
<p:selectOneMenu value="#{person.interests}" >
<f:selectItems value="#{InterestsEnum}" />
</p:selectOneMenu>
<p:column>
<f:facet name="header">
<h:outputText value="#{bundle.ListPersonTitle_interests}"/>
</f:facet>
<h:outputText value="#{item.interests}"/>
</p:column>
实体类:
public enum InterestsEnum {
FOOTBALL,
SKIING,
CYCLING,
MUSIC;
}
@Entity
public class Person implements Serializable {
@Column(name="ID")
@Id
@NotNull
@GeneratedValue(strategy = GenerationType.AUTO)
private Long personId;
@Column(name="FIRSTNAME")
@Basic(optional=false)
@NotNull
@Size(min=1,max=45)
private String firstName;
@Column(name="SURNAME")
@Basic(optional=false)
@NotNull
@Size(min=1,max=45)
private String surname;
@ElementCollection(fetch = FetchType.EAGER, targetClass = InterestsEnum.class)
@JoinTable(name = "Person_INTERESTS", joinColumns = @JoinColumn(name = "PERSON_ID"))
@Column(name = "INTERESTS", nullable = false)
@Enumerated(EnumType.STRING)
Collection<InterestsEnum> interests;
//Getters and Setters:
@ManagedBean
@ApplicationScoped
public class Data {
public InterestsEnum[] getInterests() {
return InterestsEnum.values();
}
}
<p:selectOneMenu value="#{person.interests}" >
<f:selectItems value="#{InterestsEnum}" />
</p:selectOneMenu>
<p:column>
<f:facet name="header">
<h:outputText value="#{bundle.ListPersonTitle_interests}"/>
</f:facet>
<h:outputText value="#{item.interests}"/>
</p:column>
PrimeFaces创建页面摘录:
public enum InterestsEnum {
FOOTBALL,
SKIING,
CYCLING,
MUSIC;
}
@Entity
public class Person implements Serializable {
@Column(name="ID")
@Id
@NotNull
@GeneratedValue(strategy = GenerationType.AUTO)
private Long personId;
@Column(name="FIRSTNAME")
@Basic(optional=false)
@NotNull
@Size(min=1,max=45)
private String firstName;
@Column(name="SURNAME")
@Basic(optional=false)
@NotNull
@Size(min=1,max=45)
private String surname;
@ElementCollection(fetch = FetchType.EAGER, targetClass = InterestsEnum.class)
@JoinTable(name = "Person_INTERESTS", joinColumns = @JoinColumn(name = "PERSON_ID"))
@Column(name = "INTERESTS", nullable = false)
@Enumerated(EnumType.STRING)
Collection<InterestsEnum> interests;
//Getters and Setters:
@ManagedBean
@ApplicationScoped
public class Data {
public InterestsEnum[] getInterests() {
return InterestsEnum.values();
}
}
<p:selectOneMenu value="#{person.interests}" >
<f:selectItems value="#{InterestsEnum}" />
</p:selectOneMenu>
<p:column>
<f:facet name="header">
<h:outputText value="#{bundle.ListPersonTitle_interests}"/>
</f:facet>
<h:outputText value="#{item.interests}"/>
</p:column>
如果我提交“创建”表单,则会出现以下错误:
Severe: javax.faces.component.UpdateModelException: javax.el.PropertyNotFoundException: /person/Create.xhtml @24,71 value="#{Person.interests}": Target Unreachable, identifier 'Person' resolved to null
没有可从中选择枚举选项的下拉列表(请参见屏幕截图)。“列表”还显示所有枚举成员,而不仅仅是一个
在简化我的项目,使用一个表而不是两个表,并将我的实体类更新为:
@Column(name = "INTERESTS")
@Enumerated(EnumType.STRING)
private InterestsEnum interests;
我现在有一个工作项目,允许用户在创建或更新条目时选择枚举成员
<h:selectOneMenu value="#{personController.selected.interests}" >
<f:selectItems value="#{data.interests}" />
</h:selectOneMenu>
这可以在下面看到:
在简化我的项目,使用一个表而不是两个表,并将我的实体类更新为:
@Column(name = "INTERESTS")
@Enumerated(EnumType.STRING)
private InterestsEnum interests;
我现在有一个工作项目,允许用户在创建或更新条目时选择枚举成员
<h:selectOneMenu value="#{personController.selected.interests}" >
<f:selectItems value="#{data.interests}" />
</h:selectOneMenu>
这可以在下面看到:
你把
放进另一个了吗?这里应该有一个“”我本来就有这个,结果是一样的。我应该说我刚刚开始使用PrimeFaces,所以我可能犯了错误。拿你的标题,在谷歌上过了,看看stackoverflow的点击率,找到一个大的向上投票的副本,可能是我看过的和其他人的副本,它们很有用,但不能解决我的问题!你把
放进另一个了吗?这里应该有一个“”我本来就有这个,结果是一样的。我应该说我刚刚开始使用PrimeFaces,所以我可能犯了错误。拿你的标题,在谷歌上过了,看看stackoverflow的点击率,找到一个大的向上投票的副本,可能是我看过的和其他人的副本,它们很有用,但不能解决我的问题!