velocity调用java静态方法_java – 如何访问Velocity模板中的静态成员?

我不知道在Velocity中是否有办法做到这一点:

我有一个用户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;

}

而状态是静态的内部类:

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,任何魔术数字等的任何常量.

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

Welcome ${user.name}!

#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:在webpages / include / dashboard.inc中遇到“User”[第10行,第21列]期望的是:“[”…“

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

那么有什么办法可以访问Velocity模板中的静态Java属性/引用吗?我知道作为解决方法,我可以在我的控制器中嵌入状态ID或其他标识符作为参考(这是使用Velocity作为View技术的Web MVC应用程序),但是我强烈不想嵌入任何魔术视图层中的数字或常量.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值