Newsgroup: it.comp.java
Titolo: Confrontare Enum con JSTL

Salve a tutti, ho un problema confrontando la proprietà di un bean con 
un enum in JSTL.
Ho un bean così composta:
public class Session
{
  public enum Status {QUEUED, PENDING, EXECUTED}
  private Status st;
  public void setStatus (Status st)
  {
 
this.st
 = st;
  }
  public Status getStatus ()
  {
    return (
this.st
);
  }
}
In una servlet eseguo delle operazioni, creo un oggetto di tipo Session 
e poi lo passo al Front-end per essere utilizzato:
...codice...
Session s = new Session();
s.setStatus (Status.QUEUED);
pageContext.setAttribute ("session", s);
...codice...
Nel Front-End, mi serve visualizzare lo stato del bean in una tabella, 
ed utilizzo un c:choose :
...
<c:choose>
  <c:when test="${
session.st
 == Status.QUEUED}">
  Accodato
  </c:when>
  <c:when test="${
session.st
 == Status.PENDING}">
  Pendente
  </c:when>
</c:choose>
...
Il problema è questo (ovviamente il codice riportato sopra è molto 
semplificato rispetto a quello vero, ma comunque rende l'idea): nella 
pagina html, nonostante non ci siano errori di compilazione, il codice 
non entra in nessuno dei rami del when, quindi sembra che non riesca a 
fare il confronto tra st (di tipo enum Status) e QUEUED (ad esempio).
Ho provato anche ad utilizzare eq anzichè ==, ma senza successo.
Se provo a sostituire il test con
test="${session.st.equals (Status.QUEUED)}"
il compilatore mi dà quest'errore: "The function equals must be used 
with a prefix when a default namespace is not specified". Che 
significa?
Ho provato a cercare un po' su internet, e sembrerebbe che il confronto 
che già faccio ora sia il modo giusto di operare, ma non 
funziona...qualcuno si è per caso già trovato in una situazione del 
genere e sa come uscirne? Grazie mille!

 [cut]
Problema risolto. Ho trovato questo articolo molto interessante:
http://www.javaranch.com/journal/200601/Journal200601.jsp#a3
Sostanzialmente, in JSTL non si possono utilizzare le costanti 
(definite come attributi di classe con modificatore public final 
static). Allo stesso modo, è impossibile utilizzare gli ENUM.
Tuttavia è possibile ricorrere a uno stratagemma di questo tipo:
- creare una propria tag library in cui viene definita una funzione 
static
<taglib version="2.0">
    <tlib-version>1.2</tlib-version>
    <uri>package.taglib</uri>
    <function>
	<name>getStatus</name>
	<function-class>package.Session</function-class>
	<function-signature>
		Status getStatus (java.lang.String)
	</function-signature>
    </function>
</taglib>
- nella classe di riferimento, creare la funzione per recuperare l'enum
public class Session
{
  public enum Status {QUEUED, PENDING, EXECUTED}
  public static Status getStatus (String eName)
  {
    return Status.valueOf (eName);
  }
}
- nella pagina JSP, richiamare la funzione per avere il nostro Enum a 
portata di mano da utilizzare:
<%@taglib uri="packate.taglib" prefix="mylib" %>
<c:set var="myvar" value="${mylib:getStatus ('QUEUED')}" />
Una cosa simile potrebbe esser fatta per le costanti...che dire, un 
sentito GRAZIE agli amici della Sun, sperando che un giorno mettano il 
supporto nativo alle costanti e agli enum nelle pagine JSTL (ovviamente 
utilizzabili senza ricorrere al <% %> ma con i tag standard)...spero 
possa essere utile a qualcuno che si è trovato di fronte al mio stesso 
problema!!! :)