`
anct125
  • 浏览: 30120 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

寻找velocity模板的使用技巧

阅读更多

一.内置对象(没有配置toolbox情况)
    1.HttpServletRequest -------------------------$request
    2.HttpServletResponse -----------------------$response
    3.HttpSession ----------------------------------$session
二.layout
     1.http://qieqie.iteye.com/blog/65028
三.vm语法
    1.parse与include
       parse-------动态包含vm文件,文件间可共享vm变量
       include-----静态引入,不对vm表达式做解析
       jsp中的<jsp:include page="" />也是动态引入jsp,但是两个jsp之间不能共享变量

     2.减法运算
       #set($index=$index-1)      ##这条语法会出错,改成如下:
       #set($index=$index - 1)    ##在减号前后各加一个空格

     3.判断字符是否相等
       

#if($a==$b) <div>success</div>#end     ##如果$a或$b为空,这条语句有语法错误,改成如下:
#if("$a"=="$b") <div>success</div>#end 或者
#if($a&&$b&$a==$b) <div>success</div>#end 

 

    4.javascript中使用vm变量
        

<script>
         #if($a&&$a.length()>0)
            var a="$a"
            alert(a);
        #end
</script>

 
    5. foreach循环的counter(循环次数计数)
        在velocity.properties中有一段配置
        directive.foreach.counter.name = velocityCount               ##定义变量名称
        directive.foreach.counter.initial.value = 1                          ##定义计算从1开始累加
        例如:
        

#foreach($n in [1..10])
              #if($velocityCount==$n)
                    <div>计数开始$velocityCount</div>
              #end          
#end

 
四.模板的解析
    1.模板文件的merge
       

        StringWriter writer = new StringWriter();
        Map context=new HashMap();
        context.put("vm_prop1","12");
        VelocityContext model = new VelocityContext(context);
        model.put("vm_prop2", "14");
   
        try {
             Template tpl = Velocity.getTemplate("portal.vm");
            tpl.merge(model, writer);
            writer.close();
        } catch (Exception e) {
             log.error("Can't merge portal.vm", e);
         }
        log.info(writer.toString);

 
        对portal.vm中的vm_prop1和vm_prop2两个变量赋值并解析返回writer

    2.字符串的merge    
     

public static boolean evaluate(org.apache.velocity.context.Context context, Writer writer, String logTag, Reader reader) throws ParseErrorException, MethodInvocationException, ResourceNotFoundException, IOException {
        SimpleNode nodeTree = null;
        try {
              nodeTree = RuntimeSingleton.parse(reader, logTag, false);
        } catch (ParseException pex) {
              throw new ParseErrorException(pex.getMessage());
        }
        if (nodeTree != null) {
              InternalContextAdapterImpl ica = new InternalContextAdapterImpl(context);
              ica.pushCurrentTemplateName(logTag);
        try {
            try {
                 nodeTree.init(ica, RuntimeSingleton.getRuntimeServices());
            } catch (Exception e) {
                 RuntimeSingleton.error("Velocity.evaluate() : init exception for tag = " + logTag + " : " + e);
            }
            nodeTree.render(ica, writer);
        } finally {
            ica.popCurrentTemplateName();
         }

    return true;
   }
   return false;
}

 


StringReader reader = new StringReader("#foreach($n in $list) <ul><li>$n.Id</li></ul>#end");
reader为读取一个vm文件里的内容,包含vm表达式,logTag为这一串字符串赋予一个模板名称(如:"a.vm")通过context对vm表达式赋值,并对reader读取的字符串进行解析,返回给writer

五.servlet应用
    1.可增加一个Listener,在这个Listener初始化velocity的一些配置,这样避免每个servlet都需要初始化velocity

          

                        Properties props = new Properties();
	        try {
	            File conf = new File(event.getServletContext().getRealPath("WEB-INF/velocity.properties"));
	            props.load(new FileInputStream(conf));
	        }catch (Exception e) {
                             e.printStackTrace();
                        }
	        try {
	            Iterator<Object> iter = props.keySet().iterator();
	            while(iter.hasNext()) {
	                String key = (String) iter.next();
	                Velocity.setProperty(key,props.getProperty(key));
	            }
	            Velocity.setProperty( RuntimeConstants.RUNTIME_LOG_LOGSYSTEM_CLASS,
	                "org.apache.velocity.runtime.log.SimpleLog4JLogSystem" );
	            Velocity.setProperty("runtime.log.logsystem.log4j.category", "sys.velocity");
	            Velocity.setProperty("resource.loader","file");
	            Velocity.setProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, event.getServletContext().getRealPath("/WEB-INF/templates"));
	            Velocity.setProperty("parser.pool.size","3");
	            Velocity.setProperty("velocimacro.library","macro_default.vm,macro_expopo.vm");
	            Velocity.init();
	        } catch (Exception e) {
	            e.printStackTrace();
	        }

 
  

0
1
分享到:
评论

相关推荐

    Velocity模板使用指南中文版

    ** Velocity 模板使用指南中文版 ** Velocity 是一个基于 Java 的开源模板引擎,它允许开发者将业务逻辑与页面展示分离,使得网页设计者可以专注于页面的布局和样式,而程序员则关注于程序的逻辑处理。Velocity 在 ...

    velocity模板使用指南中文版

    Velocity 模板使用指南中文版 Velocity 是一种流行的模板引擎,广泛应用于Java 和 .Net 平台。它提供了一个灵活、可扩展的模板语言,能够根据需要生成动态内容。本文档是 Velocity 模板使用指南中文版,旨在帮助...

    Velocity模板入门DEMO

    在“Apache-Velocity-java”这个压缩包中,很可能包含了示例代码和一个简单的 Velocity 模板文件,展示如何在Java应用程序中使用Velocity来生成动态HTML。你可以通过以下步骤运行DEMO: 1. 解压压缩包。 2. 查看...

    Velocity模板技术语法详细介绍

    Velocity模板技术语法详细介绍,包括很详细的示例代码 1.变量………………………………………………………………………………1 2.循环………………………………………………………………………………2 3.条件语句...

    SpringBoot Velocity 代码生成模板

    4. 使用Velocity模板引擎,将解析出的信息填入模板,生成Java源码。 5. 编译生成的Java文件,添加到Spring Boot项目中。 在`demo`这个文件中,可能包含了上述步骤的示例代码或者配置文件。通过学习和理解这个示例,...

    Velocity模板实例

    Velocity模板实例 Velocity模板实例 Velocity模板实例 Velocity模板实例

    Velocity模板引擎Velocity模板引擎

    Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎

    使用了Struts结构和Velocity模板技术的BLOG

    本项目“使用了Struts结构和Velocity模板技术的BLOG”旨在演示如何结合这两种技术来创建一个功能完善的博客系统。 **Struts框架** Struts是一个基于MVC(Model-View-Controller)设计模式的Java Web框架。它为...

    Velocity模板解析

    - **变量引用**:在Velocity模板中,通常使用`$variable`来引用Java对象的属性,例如`$user.name`表示获取名为"user"的对象的"name"属性。 - **指令**: - `#set`:用于赋值,如`#set($count = 1)`,将$count变量...

    SpringBoot集成Mybatis,velocity模板展示数据

    本项目主要探讨的是如何将SpringBoot与Mybatis、Velocity模板引擎进行整合,以便更高效地展示和处理数据。 首先,让我们深入了解SpringBoot的核心特性。SpringBoot的设计理念是“约定优于配置”,它内置了Tomcat...

    Velocity模板应用

    ** Velocity模板应用详解 ** Velocity是一款强大的Java模板引擎,它为开发者提供了一种与呈现逻辑分离的方式,使得HTML、XML或者其他格式的文档可以更清晰地与业务逻辑代码分开。Velocity被广泛应用于Web应用开发,...

    SpringBoot集成Mybatis,velocity模板

    5. **使用Velocity模板**:创建Velocity模板文件(如`templates/email.vm`),然后在服务类中使用VelocityContext填充数据,并通过VelocityEngine渲染模板。 ```java // EmailService.java public void sendEmail...

    JavaScript模板引擎Velocity.js.zip

    Velocity模板适用于大量模板使用的场景,支持复杂的逻辑运算,包含 基本数据类型、变量赋值和函数等功能。Velocity.js 支持 Node.js 和浏览器环境。 Features 支持客户端和服务器端使用 语法是富逻辑的,构成门...

    Velocity模板引擎技术在Java Web中的应用.pdf

    * Velocity模板引擎技术需要学习Velocity模板语言和Velocity模板引擎的使用方法。 * Velocity模板引擎技术需要配置Velocity模板引擎和Java代码的集成。 Velocity模板引擎技术是Java Web开发中的一种重要技术,旨在...

    Struts2与Velocity模板

    Velocity 是一种基于 JAVA 的模板引擎,开发人员使用简单的模板语言就可以快速开发显示层,它使得显示层与程序代码分离。在 Struts2 框架中,Velocity 模板引擎可以与 Struts2 集成,实现了显示层与程序代码的分离。...

    Velocity模板语言介绍

    Velocity是一种基于Java的模板引擎(template engine),它使得非技术背景的人员能够轻松地使用一种简洁的模板语言来引用由Java代码所定义的对象。这种特性使得Velocity成为了连接Java编程与前端设计的理想桥梁。 ###...

    Velocity实现模板(详细步奏)

    Velocity 是一款开源的模板引擎,它为 Java 应用程序提供了灵活的模板处理能力,尤其适用于分离应用程序的表示层逻辑和业务逻辑。Velocity 提供了一种简单的模板语言(Velocity Template Language,VTL),使得非...

Global site tag (gtag.js) - Google Analytics