Передача значения 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
Ответы
Ответ 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>