gpt4 book ai didi

java - 如何访问 Velocity 模板中的静态成员?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:51:52 25 4
gpt4 key购买 nike

我不确定是否有办法在 Velocity 中执行此操作:

我有一个 User POJO,它有一个名为 Status 的属性,它看起来像一个枚举(但它不是,因为我坚持使用 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())) ...

...无需为状态 ID、任何魔数(Magic Number)等引用任何常量

但是,我不知道如何使用 VTL 在我的 Velocity 模板中测试这些条件。我只想根据用户的状态打印一个简单的字符串,例如:

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: "[ “...

来自 the VTL User Guide ,没有提到在VTL中直接访问Java类/静态成员,似乎条件的右手边(RHS)只能是数字文字,字符串文字,属性引用或方法引用。

那么有什么方法可以访问 Velocity 模板中的静态 Java 属性/引用?我知道作为一种解决方法,我可以将状态 ID 或其他标识符作为引用嵌入到我的 Controller 中(这是一个使用 Velocity 作为 View 技术的 Web MVC 应用程序),但我强烈不想嵌入任何魔法 View 层中的数字或常量。

最佳答案

我找到了一个解决方法,允许我将每个 User.Status 对象添加到 Velocity 上下文,这避免了对模板中常量或魔数(Magic Number)的任何类型的引用。

在 Controller /Java 端:

// put the statuses directly into the model
Map statusMap = new HashMap();
statusMap.put("user", User.Status.USER);
statusMap.put("groupOperator", User.Status.ADMIN);
...
modelAndView.addObject("statusmap", statusMap);

然后在模板中可以像这样引用这些值:

#if($user.status == $statusmap.user)
You are a regular user
#elseif($user.status == $statusmap.admin)
You are an administrator
##etc...
#end

关于java - 如何访问 Velocity 模板中的静态成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/462223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com