Передача значения Enum в качестве параметра из JSF - PullRequest
19 голосов
/ 12 октября 2010

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

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 это не класс

Причина, по которой у меня есть Type в моем EJB, чтобы я мог создать перечислимый тип для моей сущности, чтобы мой запрос выглядел следующим образом

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

Ответы [ 2 ]

41 голосов
/ 12 октября 2010

Вы не можете получить доступ к таким перечислениям в EL.Однако JSF имеет встроенные преобразователи перечислений для EL.Вы можете просто использовать имя перечисления как строку.

<h:commandButton value="Test" action="#{myBean.Test('PROFILE_COMMENT')}" />
0 голосов
/ 27 апреля 2016

В моем случае , что помогло мне.

Простое сравнение enum с его значением.EL распознает его, а также проверяет, существует ли это значение при проверке xhtml.

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