zoukankan      html  css  js  c++  java
  • Velocity模板引擎入门

    类似于PHP中的Smarty,Velocity是一个基于Java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。从而实现界面和Java代码的分离,使得界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点。

    另外,Velocity的能力远不止web站点开发这个领域,例如,它可以从模板(template)产生SQL和PostScript、XML,它也可以被当作一个独立工具来产生源代码和报告,或者作为其他系统的集成组件使用。Velocity也可以为Turbine web开发架构提供模板服务(template service)。Velocity+Turbine提供一个模板服务的方式允许一个web应用以一个真正的MVC模型进行开发。


    编写Velocity版的Hello World
    获取Velocity相关JAR文件:

    http://velocity.apache.org/网站上下载最新的Velocity,这里我们下载了velocity-1.7.zip

    相关Jar包添加到项目中:

    解压velocity-1.7.zip,发下其根目录下有两个JAR文件:

    velocity-1.7.jar velocity-1.7-dep.jar

    其中velocity-1.7-dep.jar包含了:

    velocity-1.7.jar commons-collections-3.2.1.jar commons-lang-2.4.jar oro-2.0.8.jar(这些JAR文件位于解压目录的lib目录下)

    在JAR包不冲突的情况下可以直接使用velocity-1.7-dep.jar

    载类路径下添加velocity.properties文件:

    该文件一般包含如下配置:

    runtime.log = F:projectMusicalInstrumentsStorevelocity_example.log  
    file.resource.loader.path = F:projectMusicalInstrumentsStorevm  
    input.encoding = UTF-8  
    output.encoding = UTF-8  

    untime.log指定日志文件存放位置

    file.resource.loader.path指定模板的加载位置
    input.encoding指定输入编码
    output.encoding指定输出编码

    模版的使用一共以下步骤:

    1.初始化模版引擎

    2.构建velocity上下文

    3.变量值添加到上下文中

    4.选择模版

    5.合并模版和数据导出到输出流

    //初始化模板引擎  
    Velocity.init("src/velocity.properties");  
    //获取VelocityContext  
    VelocityContext context = new VelocityContext();  
    //为Context设置变量  
    context.put("title", "HelloWorld");  
    context.put("author", "arthinking");  
    //获取模板文件  
    Template template = Velocity.getTemplate("helloworld.vm");  
    StringWriter sw = new StringWriter();  
    //使用模板文件的merge函数合并模板和context提供的变量,输出到StringWriter中  
    template.merge(context, sw);  
    sw.flush();  
    System.out.println(sw.toString());  

    编写helloworld.vm模板文件(保存在file.resource.loader.path设置的目录下):

    ${title}  
    ${author}  

    一、基本语法

    1、"#"用来标识Velocity的脚本语句,包括#set、#if 、#else、#end、#foreach、#end、#include、#parse、#macro等;
    如:
    #if($info.imgs)
    <img src="$info.imgs" border=0>
    #else
    <img src="noPhoto.jpg">
    #end

    2、"$"用来标识一个对象(或理解为变量);如:$i、$msg、$TagUtil.options(...)等。

    3、"{}"用来明确标识Velocity变量;
    比如在页面中,页面中有一个$someonename,此时,Velocity将把someonename作为变量名,若我们程序是想在someone这个变量的后面紧接着显示name字符,则上面的标签应该改成${someone}name。

    4、"!"用来强制把不存在的变量显示为空白。
    如当页面中包含$msg,如果msg对象有值,将显示msg的值,如果不存在msg对象同,则在页面中将显示$msg字符。这是我们不希望的,为了把不存在的变量或变量值为null的对象显示为空白,则只需要在变量名前加一个“!”号即可。
    如:$!msg

    Velocity模版的基本语法:

    访问对象属性

    和使用EL表达式差不多,直接使用”.”导航。
    如访问object对象的id属性:${object.id }

    遍历List集合

    #foreach($element in $list)  
        #element  
    #end  

    使用判断语句

    #if($condition)  
        true  
    #else  
        false  
    #end  

    获取迭代索引值

    默认使用变量名:$velocityCount
    也可以自定义此变量名,在velocity.properties中设置

    directive.foreach.counter.name=index  

     设置索引起始位置为0

    directive.foreach.counter.initial.value=0  

    遍历Map变量

    #foreach($key in $map.keySet())  
        $key : $map.get($key)  
    #end  

    在模板中进行赋值

    #set(#a=”Hello World!”)  
    $a  
      
    #set($array1=[1..10])  
    #foreach($entry in $array1)  
        #entry  
    #end  

    使用Velocity模板引擎生成文件

    //初始化模板引擎  
    Velocity.init("src/velocity.properties");  
    //获取VelocityContext  
    VelocityContext context = new VelocityContext();  
    //为Context设置变量  
    context.put("content", "HelloWorld");  
    context.put("who", "arthinking");  
    //获取模板文件  
    Template template = Velocity.getTemplate("helloworld.vm");  
    //创建输出文件  
    File output = new File("D:/Velocity/1.html");  
    if(!output.getParentFile().exists())  
        output.getParentFile().mkdir();  
    //创建输出流  
    FileOutputStream outputStream = new FileOutputStream(output);  
    OutputStreamWriter writer = new OutputStreamWriter(outputStream);  
    BufferedWriter bufferedWriter = new BufferedWriter(writer);  
    template.merge(context, bufferedWriter);  
      
    bufferedWriter.flush();  
    outputStream.close();  
    bufferedWriter.close();  

    此外再增加一些 Springmvc+Velocity

    在servlet-context.xml中增加以下内容,如果有jsp的配置先注释掉

    <beans:bean id="velocityConfig"  
    <span style="white-space:pre">  </span>class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">  
        <beans:property name="resourceLoaderPath" value="/WEB-INF/views" />  
        <beans:property name="configLocation" value="classpath:common/velocity.properties" />  
    </beans:bean>  
      
    <beans:bean id="velocityViewResolver"  
        class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">  
        <beans:property name="suffix" value=".htm" />  
    </beans:bean>  

    在resources/common目录下创建velocity.properties

    #encoding  
    input.encoding  =UTF-8  
    output.encoding=UTF-8  
    contentType=text/html;charset=UTF-8  
      
    #autoreload when vm changed  
    file.resource.loader.cache=false  
    file.resource.loader.modificationCheckInterval  =1  
    velocimacro.library.autoreload=false  

    新建testController

    @RequestMapping(value="/test")  
    @Controller  
    public class TestController {  
        @RequestMapping(value="/index")  
        public String index(Model model) {  
            String name = "tester";  
            model.addAttribute("name", name);  
            return "test/index";  
        }  
    }  
  • 相关阅读:
    git提交本地代码到远程服务器
    报错 D:Program Files odejs ode_cache\_logs2019-05-07T07_07_30_992Z-debug.log
    vue项目中使用插件将字符串装化为格式化的json数据(可伸缩)
    odoo官方文档第二章 Data Files
    odoo官方文档第一章 ORM
    odoo模块的创建 openacademy学习笔记
    mysql存储过程的学习(二)
    mysql存储过程的学习(一)
    linux 进入mysql的常用命令(转)
    Dubbo入门学习(转)
  • 原文地址:https://www.cnblogs.com/shanheyongmu/p/5973678.html
Copyright © 2011-2022 走看看