`
kabike
  • 浏览: 610873 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

velocity中使用evaluate指令动态解析属性

    博客分类:
  • SSH
阅读更多
struts2里有select标签,可以方便的生成html的select元素.
用velocity以后,怎么用select标签呢
第一,可以用#sselect.事实上,在velocity页面中,可以使用#s的前缀来使用struts2的标签
详情见http://struts.apache.org/release/2.3.x/docs/velocity-tags.html
第二,用velocity的宏来实现自定义组件.
先考虑一个普通java类Bar,有foo和bar两个属性,在velocity中访问这两个属性,可以用
$bar.foo
$bar.bar
但是如何能动态指定要访问的属性呢?
evaluate指令可以用来在运行时动态解析模板语言.
#set($prop="bar")
#evaluate("\$bar.$prop")
#set($prop="foo")
#evaluate("\$bar.$prop")
其中"\"用来转义"$"

下面用宏来组成一个自定义的select元素
#macro (fooList $list $name $listKey $listValue $headerKey $headerValue)
#set($currentValueExpression = "$$name")
#set($currentValue = "#evaluate($currentValueExpression)")
<select name="$name">

#if( $headerKey  && $headerValue  )
  <option value="$headerKey">$headerValue</option>
#end

#foreach( $v in $list )
  #set($dynamicValueExpression = "\$v.$listValue")
  #set($dynamicKeyExpression = "\$v.$listKey")
  #set($dynamicKey = "#evaluate($dynamicKeyExpression)")
  <option value="$dynamicKey"
  #if( $dynamicKey == $currentValue  )
   selected="selected"
  #end>
  #evaluate($dynamicValueExpression)</option>
#end
</select>
#end

这样来调用这个宏,产生类似于struts2 select标签的效果
#fooList($barList "currentBarId" "fooId" "fooName")

最后吐槽下velocity的文档,它说调用宏的时候,传递的参数个数必须和定义时一致
引用

when the Velocimacro is invoked, it must be called with the same number of arguments with which it was defined

那现在如果我硬少几个参数,照样能调用,也不报错,那个"must"真是莫大的讽刺....
分享到:
评论

相关推荐

    velocity中文资料以及实例详解

    Velocity 是一个基于Java的模板引擎,它允许网页设计师在页面中嵌入动态内容,而无需直接接触Java代码。通过Velocity,网页设计师可以专注于设计工作,而程序员则可以专注于编写高效的应用代码,实现了Model-View-...

    Velocity初始化过程解析

    在初始化时,开发者通常会创建一个或多个VelocityContext实例,将需要在模板中使用的变量放入其中。 2. **配置VelocityProperties** 在初始化Velocity之前,需要配置Velocity的属性。这通常通过`Properties`类来...

    Velocity模板解析

    `将一个名为"user"的对象放入上下文,然后在模板中使用`$user`。 3. **Velocity模板引擎配置** - 可以通过VelocityConfigurer类配置Velocity引擎,比如设置模板路径、编码格式、缓存策略等。 - `Velocity.init()`...

    Velocity教程

    在本文中,我们将深入探讨Velocity的核心概念、使用方法以及如何将其应用于实际项目。 **一、Velocity简介** Velocity是Apache软件基金会的一个开源项目,它提供了简单易用的模板语言,用于生成HTML、XML、电子邮件...

    Velocity 源码例子

    - **Velocity Context**:存储模板中使用的变量和方法,它是模板和Java对象之间的桥梁。 - **Directives**:如`#set`, `#if`, `#foreach`等,用于控制模板的逻辑流程。 - **Macros**:可重用的模板片段,类似于...

    velocity jar包

    Velocity模板语言(VTL)是Velocity的核心,它允许开发者在模板文件中使用特定的指令和变量。例如,`#set`用于设置变量,`$variable`用于输出变量,`#if`、`#else`、`#end`用于条件判断,`#foreach`用于循环迭代。...

    velocity 配置jar包

    3. **设置 Context**:将需要在模板中使用的 Java 对象放入 Context。 ```java VelocityContext context = new VelocityContext(); context.put("name", "World"); ``` 4. **渲染模板**:使用 VelocityEngine 和 ...

    Velocity 应用示例

    - **resources** 目录:可能存储 Velocity 配置文件(如 `velocity.properties`),以及应用中使用的资源文件。 - **src/main/java** 目录:包含 Velocity 相关的 Java 类,如控制器、模型类和 velocity 工具类。 - ...

    Velocity简单案例

    在这个"Velocity简单案例"中,我们可以推测其包含了一个基础的Velocity模板使用示例,可能包括以下几个关键知识点: 1. **Velocity模板语言(VTL)**: VTL是一种声明式语言,允许开发者在模板中插入变量、控制结构...

    velocity生成静态页面实例

    Velocity的工作原理是,它解析含有 Velocity指令的模板文件,这些指令通常是以`$`或`#`开头的特殊标记,然后在运行时将这些指令与Java对象中的数据进行结合,最终生成输出。这种方式极大地简化了Web应用中视图层的...

    Apache Velocity - Velocity User Guide

    - **属性(Properties)**:配置 Velocity 的方法及其如何在模板中使用。 - **方法(Methods)**:调用 Java 方法的方式。 - **属性查找规则(Property Lookup Rules)**:解释 Velocity 如何查找并解析属性。 - **...

    Velocity标签大全

    Velocity 还有其他指令,如 `#stop` 用于停止模板的处理,`#parse` 用于解析另一个文件,`#evaluate` 用于执行 Java 表达式等。这些指令在模板设计中都有特定的用途,可以根据实际需求灵活使用。 通过以上介绍,...

    Velocity Demo

    学习Velocity Demo,不仅可以了解如何在Java项目中使用Velocity,还能掌握模板引擎的基本原理和最佳实践。通过实际操作,你可以更好地理解如何将Java对象的数据与HTML页面动态结合,实现更灵活的Web页面生成。同时,...

    velocity 引擎 资源包

    3. **模板解析**: 使用 `VelocityEngine` 加载模板文件,然后通过 `evaluate()` 或 `mergeTemplate()` 方法进行解析。 4. **生成输出**: 解析后的结果通常是一个字符串,可以写入到文件、HTTP 响应或其它输出流中。...

    Velocity模板应用案例

    "VelocityTest"可能是一个示例代码或测试文件,用于演示如何在实际项目中使用Velocity。这通常包括创建VelocityContext对象(用于存储数据),加载模板文件,以及合并上下文数据和模板以生成最终输出。在学习和实践...

    模板引擎 Velocity

    在 Velocity 中,模板语言(Velocity Template Language, VTL)被用于创建动态内容。VTL 提供了一系列的指令和宏,开发者可以使用这些元素来控制模板的逻辑。例如,`#if`、`#else`、`#foreach` 等用于条件判断和循环...

    velocity教程

    3. **创建上下文**: 创建一个 VelocityContext 对象,向其中添加需要在模板中使用的变量。 4. **合并上下文和模板**: 使用 `mergeTemplate()` 或 `evaluate()` 方法将上下文和模板合并,生成输出。 5. **处理结果*...

    Velocity代码生成工具

    - **基本概念**:VTL是Velocity模板引擎使用的脚本语言,它提供了一系列内置对象、变量和指令来帮助生成动态内容。 - **变量**:用于存储数据值。 - **属性**:可以是字符串、数字或任何其他类型的数据。 - **方法**...

Global site tag (gtag.js) - Google Analytics