2010-10-12 38 views
19

Estoy intentando migrar mi código existente al uso de Enum y tengo algunos problemas debido a mi falta de experiencia con Enum. Primero que nada aquí están mis estructuras. En mi EJB, junto con Entity, tengo una clase enum (no estoy seguro de si incluso una clase).Pasar un valor de Enum como parámetro de JSF

public enum Type { 
    PROFILE_COMMENT, 
    GROUP_COMMENT 
} 

En mi bean gestionado myBean.java, tengo

@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); 
    } 

} 

entonces en mi JSF,

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

me java.lang.ClassNotFoundException: diciendo Type no es una clase

La razón por la que tengo Type en mi EJB para poder crear un tipo enumerado para mi entidad, por lo que mi consulta se vería así

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

Respuesta

36

No se puede acceder a las enumeraciones como que en EL. Sin embargo, JSF tiene conversores de enum incorporados para EL. Puedes simplemente usar el nombre enum como cadena.

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

Gracias. Eso tiene que ser. –

+0

De nada. – BalusC

+0

@BalusC: Aunque esto funcionó para mí mientras usaba glassfish, pero después de migrar a tomcat 7, esto falló, ¿podría indicar por qué? –

-1

En mi caso that me ayudó.

Simple compare enum a su valor. EL lo reconoce y también verifica si existe ese valor al validar xhtml.

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