zoukankan      html  css  js  c++  java
  • velocity 相关

    Apache Velocity 是一个基于java的模板引擎(template engine)

    应用场景
    1.Web 应用:开发者在不使用 JSP 的情况下,可以用 Velocity 让 HTML 具有动态内容的特性
    2.源代码生成:Velocity 可以被用来生成 Java 代码、SQL 


    语法概要
    1.在 Velocity 中所有的关键字都是以#开头的,而所有的变量则是以$开头。

    2.关系和逻操作符
    Velocity 也具有逻辑AND, OR 和 NOT 操作符。

    3.在Velocity中可以使用循环语法遍历集合,语法结构如下:

    #foreach($item in $list)
     $item
     $velocityCount 
    #end

    4.在Velocity中可以使用条件语法对流程进行控制

    #if(condition)
    ...dosonmething...
    #elseif(condition)
    ...dosomething...
    #else
    ...dosomething...
    #end

    5.#include和#parse的作用都是引入本地文件, 为了安全的原因,被引入的本地文件只能在TEMPLATE_ROOT目录下。

    区别:

    与#include不同的是,#parse只能指定单个对象。而#include可以有多个

    如果您需要引入多个文件,可以用逗号分隔就行:

    #include (“one.gif”, “two.txt”, “three.htm” )

    #include被引入文件的内容将不会通过模板引擎解析;而#parse引入的文件内容Velocity将解析其中的velocity语法并移交给模板,意思就是说相当与把引入的文件copy到文件中。

    velocity自定义功能标签:

    1.加载设置

    public VelocityServiceImpl() {
    		VelocityEngineFactoryBean factory = new VelocityEngineFactoryBean();
    		Properties property = new Properties();
    		property.setProperty("resource.loader", "class");
    		property.setProperty("class.resource.loader.class",
    				"org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
    		property.setProperty("input.encoding", DEFAULT_ENCODING);
    		property.setProperty("output.encoding", DEFAULT_ENCODING);
    		property.setProperty(Velocity.EVENTHANDLER_REFERENCEINSERTION,
    				"com.sinolife.bep.common.util.VelocityReferenceHandler");
    		//自定义标签
    		property.setProperty("userdirective","com.sinolife.bep.common.util.UnTransferDirective");
    		factory.setVelocityProperties(property);
    		factory.setResourceLoader(PlatformContext.getGoalbalContext(ResourceLoader.class, ResourceLoader.class));
    		try {
    			factory.afterPropertiesSet();
    		} catch (Exception e) {
    			throw new RuntimeException("Instal LocalLoginHander Error", e);
    		}
    		velocityEngine = factory.getObject();
    	}
    

    2.定义标签

    /**
     * 自定义不转义标签,
     * 功能:velocity使用此标签输出的值不会做转义处理
     * 模板使用:#unTransfer("参数1")
     * 如:#unTransfer("<//123>")
     * 会直接输出<//123>到页面,不做转义。
     * @author zhonglihai
     *
     */
    public class UnTransferDirective  extends Directive{
        @Override
        public String getName() {
            return "unTransfer";//自定义指令的名称
        }
    
        @Override
        public int getType() {
            return 2;//配置不带结束符
        }
    
    	@Override
      public boolean render(InternalContextAdapter context,
    			Writer writer, Node node) throws IOException,
    			ResourceNotFoundException, ParseErrorException,
    			MethodInvocationException {
    		try {
    			String str = node.jjtGetChild(0).value(context).toString();//第一个值
    			writer.write(str.toString());//输出结果
    		} catch (Exception e) {
    			return false;
    		}
    		return true;
      }
    }
    

    3.标签使用

    --Velocity引用解析控制器
    public class VelocityReferenceHandler implements ReferenceInsertionEventHandler {
    
    	public Object referenceInsert(String key, Object value) {
    		if (value instanceof java.lang.String) {
    			value = VelocityUtils.transeChar((String) value);
    		}
    		return value;
    	}
    
    }
    --工具类,转义字符
    public class VelocityUtils {
    
    	/**
    	 * 把字符串里面的特殊字符进行转换
    	 * 
    	 * @param str
    	 * @return
    	 */
    	public static String transeChar(String str) {
    		if (StringUtils.isNotBlank(str)) {
    			str = str.replaceAll("<", "<").replaceAll(">", ">").replaceAll("&", "&")
    					.replaceAll("'", "'").replaceAll(""", """);
    		}
    
    		return str;
    	}
    }
    --模板页面使用
    <!-- 	4.发送OA的单据HTML快照  5.发送OA的单据PDF快照   采用<![CDATA[ ]]> 包裹-->
    #if($filterMask.operId != "2" && $filterMask.operId != "3") 
    	#if($filterMask.operId == "4" || $filterMask.operId == "5") 
    	<td><![CDATA[#unTransfer($!{billWorkFlowHistoryDomain.dealOpinion})]]></td>
    	#else
    	<td>#unTransfer($!{billWorkFlowHistoryDomain.dealOpinion})</td>
    	#end 	
    #end
    

      



     
  • 相关阅读:
    POJ 1015 Jury Compromise【DP】
    POJ 1661 Help Jimmy【DP】
    HDU 1074 Doing Homework【状态压缩DP】
    HDU 1024 Max Sum Plus Plus【DP,最大m子段和】
    占坑补题。。最近占的坑有点多。。。
    Codeforces 659F Polycarp and Hay【BFS】
    Codeforces 659E New Reform【DFS】
    Codeforces 659D Bicycle Race【计算几何】
    廖大python实战项目第四天
    廖大python实战项目第三天
  • 原文地址:https://www.cnblogs.com/zhonglihai/p/12090610.html
Copyright © 2011-2022 走看看