将枚举值作为参数从 JSF 传递

2022-09-02 03:00:46

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

public enum Type {
    PROFILE_COMMENT,
    GROUP_COMMENT
} 

在我管理的豆子,我有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

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

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

答案 1

您不能像 EL 中那样访问枚举,但是 JSF 具有用于 EL 的内置枚举转换器。您只能将枚举名称用作字符串。

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

答案 2

在我的情况下,这对我有帮助。

简单地将枚举与其值进行比较。EL 识别它,并在验证 xhtml 时检查该值是否存在。

<c:if test="#{requestManager.selectedRequestType == 'ItemCreate' or requestManager.selectedRequestType == 'ItemChange'}"></c:if>