no estoy seguro de si hay una manera de hacer esto en la velocidad o no:¿Cómo acceder a los miembros estáticos en una plantilla de Velocity?
tengo un POJO usuario el que una propiedad denominada Estado, que se parece a una enumeración (pero no lo es, ya que estoy atascado en Java 1.4), la definición es como la siguiente:
public class User {
// default status to User
private Status status = Status.USER;
public void setStatus(Status status) {
this.status = status;
}
public Status getStatus() {
return status;
}
y el estado es una clase interna estática:
public static final class Status {
private String statusString;
private Status(String statusString) {
this.statusString = statusString;
}
public final static Status USER = new Status("user");
public final static Status ADMIN = new Status("admin");
public final static Status STATUS_X = new Status("blah");
//.equals() and .hashCode() implemented as well
}
Con este patrón, un status de usuario fácilmente se puede probar en un tales condicional
if(User.Status.ADMIN.equals(user.getStatus())) ...
... sin tener que hacer referencia a cualquier constante para el ID de estado, los números mágicos, etc.
Sin embargo, no puedo encontrar la manera de probar estos condicionales en mi plantilla de velocidad con VTL. Me gustaría simplemente imprimir una cadena sencilla basada en el estado del usuario, tales como:
Welcome <b>${user.name}</b>!
<br/>
<br/>
#if($user.status == com.company.blah.User.Status.USER)
You are a regular user
#elseif($user.status == com.company.blah.User.Status.ADMIN)
You are an administrator
#etc...
#end
Pero esto produce una excepción que se parece a org.apache.velocity.exception.ParseErrorException: Encountered "User" at webpages/include/dashboard.inc[line 10, column 21] Was expecting one of: "[" ...
De the VTL User Guide, no hay ninguna mención de acceder a una aplicación Java clase/miembro estático directamente en VTL, parece que el lado derecho (RHS) de un condicional solo puede ser un número literal, un literal de cadena, una referencia de propiedad o una referencia de método.
Entonces, ¿hay alguna manera de que pueda acceder a las propiedades/referencias estáticas de Java en una plantilla de Velocity? Soy consciente de que, como solución alternativa, podría incorporar el ID de estado o algún otro identificador como referencia en mi controlador (esta es una aplicación web MVC que usa Velocity como tecnología de visualización), pero no quiero incrustar ningún tipo de magia. números o constantes en la capa de vista.