• 将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(); 

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

  • 相关阅读:
    jquery选择器(复习向)
    如何使元素/文字 垂直居中?
    mvc与mvvm的区别与联系
    python16_day26【crm 增、改、查】
    python16_day25【crm】
    python16_day24【restful、crm表构、认证】
    python16_day23【cmdb前端】
    django 【认证】
    python16_day22【cmdb注释】
    django【F和Q】
  • 原文地址:https://www.cnblogs.com/icoolno1/p/2706825.html
Copyright © 2020-2023  润新知