Tôi không chắc liệu có cách nào để thực hiện điều này trong Vận tốc hay không:Làm thế nào để truy cập các thành viên tĩnh trong một mẫu Velocity?
Tôi có POJO người dùng là thuộc tính có tên Trạng thái, trông giống như một enum (nhưng không phải vì tôi bị kẹt trên Java 1.4), định nghĩa trông giống như sau:
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;
}
Và Status là một lớp bên trong tĩnh:
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
}
với mô hình này, một tình trạng người sử dụng có thể dễ dàng được kiểm tra trong một ví dụ có điều kiện như
if(User.Status.ADMIN.equals(user.getStatus())) ...
... mà không cần phải tham khảo bất kỳ hằng cho ID trạng thái, bất kỳ con số ma thuật vv
Tuy nhiên, tôi không thể tìm ra cách để thử nghiệm những điều kiện trong mẫu Velocity của tôi với VTL. Tôi muốn chỉ in một chuỗi đơn giản dựa trên tình trạng của người dùng, chẳng hạn như:
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
Nhưng điều này ném một ngoại lệ đó trông giống như org.apache.velocity.exception.ParseErrorException: Encountered "User" at webpages/include/dashboard.inc[line 10, column 21] Was expecting one of: "[" ...
Từ the VTL User Guide, không có đề cập đến việc tiếp cận một Java lớp/thành viên tĩnh trực tiếp trong VTL, có vẻ như bên tay phải (RHS) của một điều kiện chỉ có thể là một tham chiếu chữ số, chuỗi ký tự, tham chiếu thuộc tính hoặc tham chiếu phương thức.
Vậy có cách nào để tôi có thể truy cập các thuộc tính/tham chiếu Java tĩnh trong mẫu Velocity không? Tôi biết rằng như một giải pháp, tôi có thể nhúng ID trạng thái hoặc một số định danh khác làm tham chiếu trong bộ điều khiển của tôi (đây là ứng dụng web MVC sử dụng Velocity làm công nghệ Xem), nhưng tôi không muốn nhúng bất kỳ ma thuật nào số hoặc hằng số trong lớp chế độ xem.