`
cjm0000000
  • 浏览: 32772 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Velocity的坑——字符串首尾的空格那些事

阅读更多

最近的项目采用Velocity 1.7作为模板引擎,几天用下来,感觉还是挺爽的。不过今天发现一个坑:macro里面如果有多行的话,输出的字符串前后都被加上了换行和空格。直接上代码:

#macro(getContextPath)
    #set($root =  $context.webApplicationContext.servletContext.contextPath)
    #if($root.lastIndexOf('/') == 0)
        #set($root = $root + '/')
    #end
    $root
#end

 

调用:

aa#{getContextPath}aa

 输出:

aa /web/ aa

 中间确实多了空格,我的目的是所有的URL前缀都加上这个context路径,比如:

<a href="#{getContextPath}menu/list">xxx</a>

 最终我看到的结果会是这样:

<a href="#                   /web/ menu/list">xxx</a>

 很明显这不符合我的要求。

 

网上搜了一把,终于在Velocity的WIKI搜到了解决方案,http://wiki.apache.org/velocity/VelocityWhitespaceTruncatedByLineComment

 

第一种方案,把macro里面的所有语句写成一行(不要换行),在行的末尾加上##

这种方案缺点很明显,程序完全不具备可读性。

 

第二种方案(会英文的,上面的链接打开,拉到底部,那段就是解决方案),直接上代码:

 

#macro(getContextPath)
#set($root = $context.webApplicationContext.servletContext.contextPath)
#if($root.lastIndexOf('/') == 0)
#set($root = $root + '/')
#end
$root##
#end

 解释下:

行首不能缩进,否则还是有空格;(这是去除字符串前面的空格和换行)

 

输出数据的行(上面$root是输出数据的)末尾需要加上##(这是去除字符串尾部的空格)

 

PS:上面的代码是获取Servlet的context路径。

 

本文出自ITEYE BLOG,转载请注明出处:http://qurey.iteye.com/blog/1944104

 

 

分享到:
评论

相关推荐

    velocity实践——初识velocity

    NULL 博文链接:https://twb.iteye.com/blog/265761

    JS字符串false转boolean的方法(推荐)

    在JavaScript中,将字符串"false"转换为布尔值false并不是一个简单的隐式转换,因为JavaScript会把字符串"false"视作一个真值。针对这个特定问题,我们需要一个明确的方法来确保字符串"false"能被正确转换成布尔的...

    velocity基本语法

    这里定义了一个名为`$name`的变量,其值为字符串"hello"。需要注意的是,在Velocity中,所有变量都必须以字母开头。 **1.2 变量的写法** 在Velocity中,推荐使用`${}`语法来引用变量,这种写法能够避免一些潜在的...

    velocity 用户手册

    例如,`#set ($a = "Velocity")` 将字符串 "Velocity" 分配给变量 `$a`。VTL 的变量只能存储字符串,而引用变量时使用 `$` 符号,设置或调用指令时使用 `#` 符号。 在模板中,可以使用 `#foreach` 循环遍历数据集合...

    Velocity Template的另类用法:生成XML

    4. **渲染模板**:使用上下文中的数据渲染模板,生成XML字符串。 5. **处理生成的XML**:根据需要,可以选择写入文件、发送到网络或者进行其他处理。 具体代码示例可能如下: ```java import org.apache.velocity....

    Java Velocity模板引擎,简单字符串生成

    3. **合并上下文和模板**: 将`VelocityContext`中的数据与加载的模板合并,生成最终的输出字符串。VTL变量在合并过程中被替换为它们在上下文中对应的值。 4. **输出结果**: 结果可以写入到文件、流或直接返回给调用...

    velocity语法与使用方法

    Velocity提供了丰富的字符串处理功能,如拼接、截取等: - 拼接示例:`#set($directoryRoot="www") #set($templateName="index.vm") #set($template="$directoryRoot/$templateName")`,这里定义了一个名为`$...

    Velocity模板解析

    - `#escape`:用于转义特殊字符,防止XSS攻击。 - **注释**:使用`##`进行单行注释,`#* 注释内容 *#`进行多行注释。 2. **Velocity上下文(Context)** - 上下文是Velocity模板与Java对象交互的桥梁。开发者可以...

    JSP中截取在线编辑器的字符串的处理.

    这篇博客“JSP中截取在线编辑器的字符串的处理”就讨论了如何在JSP中对在线编辑器生成的内容进行字符串截取。 在线编辑器生成的HTML代码通常包含各种标签和样式,如果直接进行简单的字符串截取,可能会导致截取结果...

    Java的模板引擎Velocity初体验.pdf

    Velocity 模板引擎初体验 Velocity 是一种 Java 模板引擎技术,由 Apache 提出,是一种基于 Java 的模板引擎,允许任何人使用简单而强大的模板语言来引用定义在 Java 代码中的对象。Velocity 的主要功能是桥梁 ...

    velocity为空判断

    下面我们将详细探讨在Velocity中如何进行空值和空字符串的判断。 ### 1. 判断Velocity变量是否为null #### 方法一:`#ifnull()` 或 `#ifnotnull()` 这两个指令属于Velocity Tools的扩展,如果你的项目中引入了...

    velocity详细说明书,看了就可以上手的

    Velocity是一个基于java的模板引擎(template engine:模板引擎的作用就是取得数据并加以处理,最后显示出数据 )。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象 简明易学...

    Java用正则表达式实现${name}形式的字符串模板实例

    在Java编程中,字符串模板是一种常见的技术,它允许我们在字符串中使用特定的占位符(如`${name}`),然后根据需要替换这些占位符为实际的值。这在处理动态内容,如邮件模板、日志输出或用户消息时非常有用。正则...

    velocity的jar包

    5. **事件驱动的处理机制**:Velocity 提供了一套事件驱动的处理机制,允许用户自定义处理器对模板进行预处理或后处理,如自动转义特殊字符,防止XSS攻击。 **velocity-tools-2.0.jar** `velocity-tools-2.0.jar`...

    JAVA的Velocity语法学习

    4. 文本插值:Velocity允许在字符串中插入变量,如`你好,$name`。 5. 注释:Velocity的注释有两种形式,行内注释`#comment`和块注释`##begin comment...##end comment`。 6. 引用资源:Velocity可以使用`#...

    velocity+itext导出pdf

    4. **合并模板与数据**:使用`VelocityEngine`的`mergeTemplate`方法,将模板和上下文合并,生成一个字符串,这个字符串包含了所有动态数据填充后的HTML内容。 5. **创建 Itext 文档**:初始化一个`Document`对象,...

    velocity jar包

    这些依赖库为Velocity提供了一些基础功能,如日志记录、字符串操作等。 在实际使用中,你需要将这三个JAR文件添加到项目的类路径(Classpath)中,这样Java虚拟机才能找到并加载它们。在Maven或Gradle构建系统中,...

    velocity文档及其详细语法

    Velocity提供了字符串连接(`+`),子字符串(`substring`),以及大小写转换等操作。例如: ```vel 你好,$name.substring(0, 1).toUpperCase() + $name.substring(1)! ``` ## 5. 数组和列表处理 Velocity可以...

    Struts2 国际化字符串 拦截器

    文件的国际化字符串中使用OGNL,格式为${表达式},例如: validation.required=${getText(fileName)} is required 2. 使用java.text.MessageFormat中的字符串格式,格式为{ 参数序号(从0开始), 格式类形(number |...

    velocity语法

    - 在 Velocity 模板中,未定义的变量会被当作字符串处理。 - Velocity 不会将引用解析为对象的实例变量。例如,`$foo.Name` 被解释为调用 `getName()` 方法。 #### 2. 循环 Velocity 支持使用 `#foreach` 指令进行...

Global site tag (gtag.js) - Google Analytics