2010-10-12 15 views
19

Ich versuche, meinen vorhandenen Code auf Enum zu migrieren, und ich habe einige Probleme aufgrund meiner mangelnden Erfahrung mit Enum. Zuallererst hier sind meine Strukturen. In meiner EJB, zusammen mit Entity, habe ich eine Enum-Klasse (nicht sicher, ob es sogar eine Klasse).Übergabe eines Enum-Werts als Parameter von JSF

public enum Type { 
    PROFILE_COMMENT, 
    GROUP_COMMENT 
} 

Bei meinem Managed Bean myBean.java habe ich

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

} 

dann an meinem JSF,

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

ich java.lang.ClassNotFoundException:Type sagen, habe ich nicht eine Klasse

Der Grund Habe in meinem EJB Type, damit ich erstellen kann ein Aufzählungstyp für meine Entity, so meine Frage wie diese Sie

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

Antwort

36

aussehen würde nicht Aufzählungen wie in EL zugreifen können. JSF hat jedoch Enum-Konverter für EL eingebaut. Sie können den enum-Namen einfach als Zeichenfolge verwenden.

+0

Vielen Dank. Das muss es sein. –

+0

Gern geschehen. – BalusC

+0

@BalusC: Obwohl dies für mich bei der Verwendung von Glassfish funktionierte, aber nach der Migration zu Tomcat 7 gescheitert ist, könntest du darauf hinweisen warum? –

-1

In meinem Fall that hat mir geholfen.

Einfach vergleichen enum zu seinem Wert. EL erkennt es und überprüft auch, ob dieser Wert während der Validierung von xhtml existiert.

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