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

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

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

解决方法

我想出了一个解决方法,允许我将每个User.Status对象添加到VeLocity上下文中,避免了对模板中的常量或魔术数字的任何引用.

在控制器/ 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模板中的静态成员?的更多相关文章

  1. Swift中隐式懒惰的静态成员

    我只是注意到Swift结构的静态成员是隐式的.例如,这只会调用init一次:这背后的理由是什么?如果我想要相反的行为怎么办?

  2. swift – Sprite Kit physicsBody.resting行为

    提前致谢.如果你检查物理体的速度,你会发现它确实在移动,但速度是不可察觉的.这就是为什么没有设置休息属性.检查SKPhysicsBody是否静止的更可靠的方法是测试其线性和角速度是否几乎为零.这是一个如何做到这一点的例子:

  3. android – SimpleOnGestureListener永远不会进入onFling(…)方法

    )方法和gdt.onTouchEvent(事件);总是返回false:/有任何想法吗??谢谢我的活动课我的抽象听众解决方法替换此事件:它应该工作

  4. Android ListView与OnItemClickListener和GestureDetector

    我有一个以下ListActivity:listItems上的contextListener完美地工作.今天我添加了gestureListener和Detector,它也是这样,但是:GestureDetector检测到一切都没有了,但是在完成了逻辑之后,会打开上下文菜单,这显然不是我想要的.任何想法我做错了,还是我可以做什么?解决方法通常,您需要调用cancelLongPress()方法,并检测到onFling后的所有视图的子项.但是对于AbsListView,这个方法什么也不做:(但是我已经找到了解决方

  5. laravel-admin的图片删除实例

    今天小编就为大家分享一篇laravel-admin的图片删除实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  6. laravel-admin 后台表格筛选设置默认的查询日期方法

    今天小编就为大家分享一篇laravel-admin 后台表格筛选设置默认的查询日期方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  7. laravel-admin 在列表页添加自定义按钮的例子

    今天小编就为大家分享一篇laravel-admin 在列表页添加自定义按钮的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  8. 在laravel-admin中列表中禁止某行编辑、删除的方法

    今天小编就为大家分享一篇在laravel-admin中列表中禁止某行编辑、删除的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  9. laravel admin实现分类树/模型树的示例代码

    这篇文章主要介绍了laravel admin实现分类树/模型树,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  10. django中的auth模块与admin后台管理方法

    这篇文章主要介绍了django中的auth模块与admin后台管理方法,包括auth模块的常用方法及如何扩展auth_user表,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部