`

velocity一些容易出错点

 
阅读更多

velocity 属性引用中的属性查找规则
前己提及,属性可以引用到对象的命令. Velocity 会使用合适的策略选择引用到的命令. 它会根据协定
的命令命令格式查找. 无论属性引用的的名字是否大小写,Velocity 都有固定的查找规则.如在
$customer.address 引用时,查找顺序是:
1.getaddress()
2.getAddress()
3.get("address")
4.isAddress()
对于VTL中大写的属性名 Address 引用,将是:
1.getAddress()
2.getaddress()
3.get("Address")

4.isAddress()

 

Escaping Valid VTL References(封装有效的引用)

## The following line defines $email in this template:
#set( $email = "foo" )
$email
\$email
\\$email
\\\$emailv

上面的模板在 web 页面上的输出将是:
foo
$email
\foo
\$email

但如果 email 并没有定义,我们这样写:.

$email
\$email
\\$email
\\\$email
输出就原封不动了:
$email
\$email
\\$email
\\\$email

 

Case Substitution(可选的格式)

$foo
$foo.getBar()
## 等同于
$foo.Bar
$data.setUser("jon")
##等同于
#set( $data.User = "jon" )
$data.getRequest().getServerName()
##等同于
$data.Request.ServerName
## is the same as
${data.Request.ServerName}

 Directives(指令符号)

指令总是以 #开头后面紧跟具体的指令符. 就像引用一样(指令的一种),可以将指令理解为”表示这里
是一个什么东东).如下例生成一个出错提示:
#if($a==1)true enough#elseno way!#end
这个例子中应使用括号将 else 分开.
#if($a==1)true enough#{else}no way!#end
 #set 指令

 

“左操作数被赋值“是引用操作的一个规则.=号右侧可能是以下类型之一:
 Variable reference 变量引用
 String literal 字符串
 Property reference 属性引用
 Method reference 命令引用
 Number literal 数字
 ArrayList 数组

#set(
 $monkey = $bill ) ## variable reference
#set(
 $monkey.Friend = "monica" ) ## string literal
#set(
 $monkey.Blame = $whitehouse.Leak ) ## property reference
#set(
 $monkey.Plan = $spindoctor.weave($web) ) ## method reference
#set( $monkey.Number = 123 ) ##number literal
#set( $monkey.Say = ["Not", $my, "fault"] ) ## ArrayList
#set( $monkey.Map = {"banana" : "good", "roast beef" : "bad"}) ## Map

 .Literals (语义解析)

 使用#set 指令时,变量如果用 “”引起会被解析,如:
#set( $directoryRoot = "www" )
#set( $templateName = "index.vm" )
#set( $template = "$directoryRoot/$templateName" )
$template
输出的将是:
www/index.vm
但当用单引号引起来时,就不会被解析::
#set( $foo = "bar" )
$foo
#set( $blargh = '$foo' )
$blargh
输出后会是:
bar
$foo

Include(引入)
#include 脚本元素让模板设计者可以在模板中引入一个本地文件, 这个被引入的文件将不会经过
Velocity 的解析. 安全起见,可以引放的文件只是是配置参数 TEMPLATE_ROOT 所定义目录下的,默认为
当前目录下.
#include( "one.txt" )
如果需要引入多个文件,可以像下面这样.
#include( "one.gif","two.txt","three.htm" )
当然,还可用一个变量名来代替文件名引入.
#include( "greetings.txt", $seasonalstock )



#stop 指令用来指示在模板的某处,engine 停止解析,这一般用来调用。用法很简单.
#stop



可否通过 #parse()来注册一个宏 ?
宏必须在模板使用前定义好.前面己有一个关于此问题的建议,#parse()是运行时执进的,JVM 查找对象
的顺序不一定会全按我们预计的执行。
什么是宏的自动重新装载?
这是由配置参数决定的, 为方例开发者,在生产环境中则不需要 :
velocimacro.library.autoreload
默认的是 false.当设为 true 中,需要设定 chcheing 参数;
<type>.resource.loader.cache = false
(具体配置请见开发指南,如下是一个配置的例子)
file.resource.loader.path = templates
file.resource.loader.cache = false
velocimacro.library.autoreload = true
 
分享到:
评论

相关推荐

    代码生成工具

    这是一个繁琐且容易出错的过程。而代码生成工具则通过连接数据库,读取表结构信息,自动构建这些代码文件,使得开发者可以更专注于业务逻辑的设计和实现。 例如,如果你需要为一个新项目创建用户管理模块,首先会有...

    java 代码生成器

    - **减少错误**:人工编写大量重复代码容易出错,而代码生成器则能确保生成的代码符合规范,降低错误率。 - **一致性**:所有由生成器产出的代码风格一致,符合团队编码规范。 - **快速适应变化**:当业务需求发生...

    java代码生成工具

    2. 减少错误:手写代码容易出错,而自动化工具减少了人为错误的可能性。 3. 保持一致性:所有由工具生成的代码都遵循同一套规范和风格,有助于团队协作和代码维护。 4. 快速适应需求变化:当数据库结构发生变化时,...

    代码生成器

    面对复杂的业务逻辑和大量的数据库表,手动编写前后端代码无疑是一项耗时且容易出错的任务。这时,“代码生成器”应运而生,它能够根据数据库表信息自动生成相应的前端展示代码和后端处理代码,极大地提高了开发效率...

    NHibernate带关系的MyGeneration模板

    然而,手动编写这些映射文件既耗时又容易出错。 MyGeneration通过提供可编辑的模板,使用户能够自定义生成代码的方式。这些模板可以是基于Velocity、NVelocity或StringTemplate等模板引擎的,它们能够解析数据库...

    auto-20161012

    3. 减少错误:手动编写大量重复代码容易出错,自动化工具可以减少这种可能性。 4. 更新和维护:当需要进行库升级或结构调整时,更新模板即可批量修改所有相关代码。 在Java世界中,自动代码生成还涉及到ORM(Object-...

    java generator代码生成工具

    这些代码往往结构相似,手动编写不仅耗时,还容易出错。Java Generator的出现正是为了解决这个问题,它可以根据数据库中的表信息自动生成功能完备的代码,包括但不限于以下部分: 1. **实体类(Entity)**:生成与...

    JAVA后端代码生成器(100%能用)

    在Java开发中,这类工具通常基于某种模板语言,如FreeMarker或Velocity,可以根据数据库表结构生成对应的实体类、DAO接口、Service接口及其实现、Mapper XML文件等。这样可以避免开发者重复编写相似的代码,节省时间...

    Struts2与Struts1.x的深度比较

    - **Struts1.x** 的配置主要集中在struts-config.xml文件中,配置复杂且容易出错。 - **Struts2** 将配置分散到多个XML文件,同时支持基于注解的配置,提高了可读性和可维护性。 8. **灵活性** - **Struts1.x** ...

    Struts2DesignAndProgramming

    - **问题与局限性**:虽然Servlet技术相对于早期的CGI具有优势,但在处理HTML输出时仍存在不便之处,例如需要将HTML标签嵌入到字符串中,使得修改界面变得困难且容易出错。 - **JSP的出现**:为了解决上述问题,Sun...

    java代码生成器(mysql版)

    手动创建这些类不仅耗时,而且容易出错,而代码生成器就是解决这一问题的有效手段。 1. **数据库连接与元数据获取**:代码生成器首先需要建立到MySQL数据库的连接,通过JDBC API获取数据库的元数据,如表名、字段名...

    RSS代码大全-详细介绍RSS开发过程

    2. **JSP**:可以用来动态生成RSS页面,但通常不推荐,因为XML格式要求严格,容易出错。 3. **Java库**:如RSSJava或rome,这些库提供了方便的方法来构建和解析RSS feeds。 4. **模板引擎**:如FreeMarker或Velocity...

    电话面试题(华为/中兴/腾讯)

    需要GC的原因是手动内存管理容易出错。 10. **接口与抽象类**:接口不包含实现,强制实现所有方法,抽象类可包含部分实现,一个类可实现多个接口,但只能继承一个抽象类。 11. **StringBuffer与StringBuilder**:...

    scaffolder:脚手架-提高开发速度并标准化文件约定

    脚手架 复制粘贴容易出错。 保持项目文件结构的一致性很烦人。 共享模板太复杂了! 这是脚手架进来的地方。 有关此工具的简要介绍和动机, 。 查看目录 列表中,LS 显示&lt;templateName&gt; 共享模板脚手架配置文件变形...

    BeanUtils详细解说

    然而,直接使用Java API(如`java.lang.reflect`)进行操作虽然可行,但代码复杂度较高,容易出错,且不易维护。因此,BeanUtils应运而生,它通过封装反射机制,提供了一套易于使用的API,大大降低了开发难度。 ###...

    大数据时代创新创业发展的机遇与挑战.docx

    1. **缺乏数据分析工具**:手工处理数据效率低下且容易出错。 2. **数据分析能力不足**:缺乏系统的培训和实践经验,导致分析结果的准确性和可靠性受到质疑。 #### 三、大数据对创新创业的影响 ##### (一)大数据...

    POJOTools:java POJO类生产工具

    在开发过程中,手动编写大量的POJO类可能既耗时又容易出错,因此,POJOTools的出现就是为了自动化这个过程,提高开发效率。 描述中的“wws”可能是作者的缩写或者是项目相关的特定代号,但在此上下文中没有提供更多...

    深入浅出Struts 2 .pdf(原书扫描版) part 1

    可是,servlet也存在一个严重问题,因为所有的HTML输出必须像下面这段代码那样封装在string对象里,所以servlet将HTML标签发送给浏览器时既繁琐又容易出错: 这大大增加了编程的难度,而且即便是对网页在表现方面的...

Global site tag (gtag.js) - Google Analytics