Подтвердить что ты не робот

Передача значения Enum в качестве параметра из JSF

Я пытаюсь перенести свой существующий код на использование Enum, и у меня возникают некоторые проблемы из-за моего отсутствия опыта работы с Enum. Прежде всего, это мои структуры. В моем EJB, вместе с Entity, у меня есть класс enum (не уверен, что он даже класс).

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, чтобы я мог создать перечисляемый тип для моего Entity, поэтому мой запрос будет выглядеть следующим образом

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

Ответ 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>