从JSF传递Enum值作为参数


问题内容

我试图将现有代码迁移到使用Enum上,由于缺乏Enum的经验,遇到了一些问题。首先是我的结构。在EJBEntity中,我有一个枚举类(不确定它是否是一个类)。

public enum Type {
    PROFILE_COMMENT,
    GROUP_COMMENT
}

在我的托管bean上myBean.java,我有

@ManagedBean(name="myBean")
@SessionScoped
public class myBean {

    private Type type;

    public myBean() {
    }

    public Type getType() {
        return type;
    }

    public void setType(Type type) {
        this.type = type;
    }

    public void Test(Type t){
        System.out.println(t);
    }

}

然后在我的JSF,

<h:commandButton value="Test" action="#{myBean.Test(myBean.type.PROFILE_COMMENT)}" />

java.lang.ClassNotFoundException:Type不是上课

Type在EJB中拥有一个原因,以便可以为我的实体创建一个枚举类型,因此我的查询看起来像这样

select c from X c where c.type = Type.PROFILE_COMMENT

问题答案:

您不能在EL中访问像这样的枚举。但是,JSF内置了用于EL的枚举转换器。您可以只使用枚举名称作为字符串。

<h:commandButton value="Test" action="#{myBean.Test('PROFILE_COMMENT')}" />