2011-11-22 7 views
10

Ho un tag JSP personalizzato che utilizza un parametro che è un enum. Questo approccio è una conseguenza dell'uso di altre classi che necessitano di questa enumerazione. Il punto è che non ho idea di come assegnare un valore enum nel EL:Passaggio di un valore enum come attributo tag in JSP

<mytaglib:mytag enumParam="${now what do I type here?}" /> 

L'unica soluzione che ho trovato finora è stato quello di rendere l'enumParam un intero e convertirlo in valori desiderati:

<mytaglib:mytag enumParam="3" /> 

Credo che ci sia un modo migliore per farlo. Per favore aiuto.

risposta

12

EL consente l'uso di Enums!

Ci sono tre modi per impostare un valore di attributo tag utilizzando un rvalue o un'espressione lvalue:
[..]

Con solo testo:

< alcuni: valore di tag = "someText "/ >

Questa espressione è chiamata espressione letterale. In questo caso, il valore String dell'attributo viene convertito nel tipo previsto dell'attributo. Le espressioni del valore letterale hanno regole di sintassi speciali. Vedere le espressioni letterali per ulteriori informazioni. Quando un attributo tag ha un tipo enum, l'espressione utilizzata dall'attributo deve essere un'espressione letterale. Ad esempio, l'attributo tag può utilizzare l'espressione "hearts" per indicare Suit.hearts. Il letterale è forzato a Suit e l'attributo ottiene il valore Suit.hearts.

http://download.oracle.com/javaee/5/tutorial/doc/bnahq.html

Enum:

public Enum Color{ 
    RED, BLUE, GREEN 
} 

file JSP/Tag

<mytaglib:mytag enumParam="${'RED'}" /> 

testato con Tomcat 7.0.22 e 6.1.26 Jetty.

+0

Testato anche per funzionare su Tomcat 6.0. – Bass

-1

EL non supporta l'accesso a Enum. Dovresti prendere in considerazione l'utilizzo di stringhe.

Esempio:

public Enum Color{ 
    READ, BLUE, GREEN 
} 

È possibile passare stringa per il tag personalizzato come di seguito:

<mytaglib:mytag enumParam="RED" /> 
OR 
<mytaglib:mytag enumParam="${obj.color}" /> 

nel tag personalizzato si ottiene il valore enum come questo:

Color.valueOf("RED"); 
+2

Nel commento di devpg mostra che le enumerazioni sono supportate. E posso anche confermare che la sua soluzione funziona. –

+0

Concordato con Peter. Questo non è corretto. Nel tuo esempio, 'enumParam =" $ {'BLUE'} "' funzionerebbe bene. – dgrundel