Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 如何在p:selectOneMenu中使用枚举_Jsf_Primefaces_Enums - Fatal编程技术网

Jsf 如何在p:selectOneMenu中使用枚举

Jsf 如何在p:selectOneMenu中使用枚举,jsf,primefaces,enums,Jsf,Primefaces,Enums,在我的JSF/PrimeFaces迷你web项目中,我想使用下拉列表选择枚举项,然后在填写“创建”表单时将它们添加到数据库中。 我使用Netbeans从数据库创建一个实体类,然后使用向导“来自实体类的JSF页面”,使用PrimeFaces作为模板。这将自动创建创建/编辑/列出/查看xhtml页面。 目前我有: 枚举类: public enum InterestsEnum { FOOTBALL, SKIING, CYCLING, MUSIC; }

在我的JSF/PrimeFaces迷你web项目中,我想使用下拉列表选择枚举项,然后在填写“创建”表单时将它们添加到数据库中。
我使用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的点击率,找到一个大的向上投票的副本,可能是我看过的和其他人的副本,它们很有用,但不能解决我的问题!