2010-10-12 3 views
19

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

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 

ответ

36

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

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

Спасибо. Это должно быть так. –

+0

Добро пожаловать. – BalusC

+0

@BalusC: Хотя это сработало для меня при использовании стеклянной рыбы, но после перехода на tomcat 7 это не удалось, не могли бы вы указать, почему? –

-1

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

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

<c:if test="#{requestManager.selectedRequestType == 'ItemCreate' or requestManager.selectedRequestType == 'ItemChange'}"></c:if> 
Смежные вопросы