Я не уверен, есть ли способ сделать это в Velocity или нет:
У меня есть пользовательский POJO, у которого есть свойство с именем Status, которое выглядит как enum (но это не так, поскольку я застрял на Java 1.4), определение выглядит примерно так:
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;
}
И Status является статическим внутренним классом:
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
}
С этим шаблоном пользовательский статус может быть легко проверен в условных выражениях, таких как
if(User.Status.ADMIN.equals(user.getStatus())) ...
... без указания каких-либо констант для идентификатора состояния, магических чисел и т. Д.
Однако я не могу понять, как проверить эти условия в моем шаблоне Velocity с VTL. Я хотел бы просто напечатать простую строку в зависимости от статуса пользователя, например:
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
Но это создает исключение, которое выглядит как org.apache.velocity.exception.ParseErrorException: Encountered "User" at webpages/include/dashboard.inc[line 10, column 21] Was expecting one of: "[" ...
Из Руководства пользователя VTL , нет упоминания о доступе к классу / статическому члену Java непосредственно в VTL, кажется, что правая часть (RHS) условного выражения может быть только числовым литералом , строковый литерал, ссылка на свойство или ссылка на метод.
Так есть ли способ получить доступ к статическим свойствам / ссылкам Java в шаблоне Velocity? Я знаю, что в качестве обходного пути, я мог бы встроить идентификатор статуса или какой-либо другой идентификатор в качестве ссылки в моем контроллере (это веб-приложение MVC, использующее Velocity в качестве технологии View), но я настоятельно не хочу внедрять какое-либо волшебство числа или константы в слое вида.