zoukankan      html  css  js  c++  java
  • 将java版的Velocity翻译成.net版本(一)使用入门

     /Files/icoolno1/nvelocity.rar

    环境需求:.net framework 4.0

    Velocity的流程:

    读取模板文件->解析语法->合并变量执行->输出目标文件

    下边是JAVA的示例:

    /*
     * Licensed to the Apache Software Foundation (ASF) under one
     * or more contributor license agreements.  See the NOTICE file
     * distributed with this work for additional information
     * regarding copyright ownership.  The ASF licenses this file
     * to you under the Apache License, Version 2.0 (the
     * "License"); you may not use this file except in compliance
     * with the License.  You may obtain a copy of the License at
     *
     *   
    http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing,
     * software distributed under the License is distributed on an
     * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
     * KIND, either express or implied.  See the License for the
     * specific language governing permissions and limitations
     * under the License.    
     
    */

    import org.apache.velocity.app.Velocity;
    import org.apache.velocity.VelocityContext;
    import org.apache.velocity.Template;

    import org.apache.velocity.exception.ParseErrorException;
    import org.apache.velocity.exception.ResourceNotFoundException;

    import java.io.*;
    import java.util.ArrayList;

    /**
     * This class is a simple demonstration of how the Velocity Template Engine
     * can be used in a standalone application.
     *
     * 
    @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
     * 
    @author <a href="mailto:geirm@optonline.net">Geir Magnusson Jr.</a>
     * 
    @version $Id: Example.java 463298 2006-10-12 16:10:32Z henning $
     
    */

    public class Example
    {
        public Example(String templateFile)
        {
            try
            {
                /*
                 * setup
                 
    */

                Velocity.init("velocity.properties");

                /*
                 *  Make a context object and populate with the data.  This
                 *  is where the Velocity engine gets the data to resolve the
                 *  references (ex. $list) in the template
                 
    */

                VelocityContext context = new VelocityContext();
                context.put("list", getNames());

                /*
                 *  get the Template object.  This is the parsed version of your
                 *  template input file.  Note that getTemplate() can throw
                 *   ResourceNotFoundException : if it doesn't find the template
                 *   ParseErrorException : if there is something wrong with the VTL
                 *   Exception : if something else goes wrong (this is generally
                 *        indicative of as serious problem...)
                 
    */

                Template template =  null;

                try
                {
                    template = Velocity.getTemplate(templateFile);//获取模板 
                }
                catch( ResourceNotFoundException rnfe )
                {
                    System.out.println("Example : error : cannot find template " + templateFile );
                }
                catch( ParseErrorException pee )
                {
                    System.out.println("Example : Syntax error in template " + templateFile + ":" + pee );
                }

                /*
                 *  Now have the template engine process your template using the
                 *  data placed into the context.  Think of it as a  'merge'
                 *  of the template and the data to produce the output stream.
                 
    */

                BufferedWriter writer = writer = new BufferedWriter(
                    new OutputStreamWriter(System.out));

                if ( template != null)
                    template.merge(context, writer); //合并并输出到流 

                /*
                 *  flush and cleanup
                 
    */

                writer.flush();
                writer.close();
            }
            catch( Exception e )
            {
                System.out.println(e);
            }
        }

        public ArrayList getNames()
        {
            ArrayList list = new ArrayList();

            list.add("ArrayList element 1");
            list.add("ArrayList element 2");
            list.add("ArrayList element 3");
            list.add("ArrayList element 4");

            return list;
        }

        public static void main(String[] args)
        {
            Example t = new Example(args[0]);
        }

    下边是一段C#代码示例:

    StreamWriter sw = new StreamWriter(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "o.txt"));

                ExtendedProperties props = new ExtendedProperties();
                string tplPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "templates");
                props.AddProperty("file.resource.loader.path", tplPath);
                props.AddProperty("input.encoding""UTF-8");
                props.AddProperty("output.encoding""UTF-8");
                props.AddProperty("velocimacro.library""VM_global_library.vm");
                
                try
                {
                    Velocity.Init(props);
                    VelocityContext context = new VelocityContext();
                    context.Put("test"new Class1());
                    Template template = Velocity.GetTemplate("t.txt");//获取模板

                    template.Merge(context, sw);//合并并输出到流
                }
                catch (Exception ex)
                {

                }
                sw.Flush();
               sw.Close(); 

    以上两段基本上相同,主要区别就是加载配置方式不一样,当然这个区别也是两语言之间的差别。

  • 相关阅读:
    POJ 1811 Prime Test 素性测试 分解素因子
    sysbench的安装与使用
    电脑中已有VS2005和VS2010安装.NET3.5失败的解决方案
    I.MX6 show battery states in commandLine
    RPi 2B Raspbian system install
    I.MX6 bq27441 driver porting
    I.MX6 隐藏电池图标
    I.MX6 Power off register hacking
    I.MX6 Goodix GT9xx touchscreen driver porting
    busybox filesystem httpd php-5.5.31 sqlite3 webserver
  • 原文地址:https://www.cnblogs.com/icoolno1/p/2706825.html
Copyright © 2011-2022 走看看