`
longgangbai
  • 浏览: 7340618 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

應用程序中非view层访问Velocity應用

阅读更多

在发送郵件时使用在业务层访问

package com.unutrip.template.util;

import java.io.StringWriter;
import java.io.Writer;
import java.util.Map;
import java.util.Properties;

import org.apache.log4j.Logger;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.exception.VelocityException;

/**
 * Velocity 模板 使用的工具类
 *
 * @author longgangbai
 *
 */
public class VelocityUtils {
 private static final Logger logger = Logger.getLogger(VelocityUtils.class);

 private static VelocityEngine velocityEngine = new VelocityEngine();
 static {
  Properties p = new Properties();
  p.setProperty("file.resource.loader.path", VelocityUtils.class
    .getResource("/velocity/").getFile());
  System.out.println("path"
    + VelocityUtils.class.getResource("/velocity/").getFile());
  try {
   velocityEngine.init(p);
   /*
    * velocityEngine.setProperty("input.encoding", "UTF-8");
    * velocityEngine.setProperty("out.stream", "UTF-8");
    * velocityEngine.setProperty("resource.loader", "class");
    * velocityEngine .setProperty("class.resource.loader.class",
    * "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
    */

  } catch (Exception e) {
   logger.error("loader velocity is error!");
   e.printStackTrace();
  }

 }

 public VelocityUtils() {
 }

 /**
  *
  * @param templateLocation
  * @param model
  * @param writer
  * @throws VelocityException
  */
 public static void mergeTemplate(String templateLocation, Map model,
   Writer writer) throws VelocityException {
  try {
   VelocityContext velocityContext = new VelocityContext(model);
   velocityEngine.mergeTemplate(templateLocation, velocityContext,
     writer);
  } catch (Exception ex) {
   logger
     .error(
       "Why does VelocityEngine throw a generic checked exception, after all?",
       ex);
   throw new VelocityException(ex.toString());
  }
 }

 /**
  *
  * @param velocityEngine
  *            模板引擎
  * @param templateLocation
  *            模板的名稱
  * @param encoding
  *            設置的編碼格式
  * @param model
  *            模板對應的模型的對象
  * @param writer
  *            輸出對象
  * @throws VelocityException
  *             拋出异常的信息
  */
 private static void mergeTemplate(VelocityEngine velocityEngine,
   String templateLocation, String encoding, Map model, Writer writer)
   throws VelocityException {
  try {
   VelocityContext velocityContext = new VelocityContext(model);
   velocityEngine.mergeTemplate(templateLocation, encoding,
     velocityContext, writer);
  } catch (Exception ex) {
   logger
     .error(
       "Why does VelocityEngine throw a generic checked exception, after all?",
       ex);
   throw new VelocityException(ex.toString());
  }
 }

 /**
  * 常用的提供模板內容的字符串信息(常用的方法的)
  *
  * @param templateLocation
  * @param model
  * @return
  * @throws VelocityException
  */
 public static String mergeTemplateIntoString(String templateLocation,
   Map model) throws VelocityException {
  StringWriter result = new StringWriter();
  mergeTemplate(velocityEngine, templateLocation, "UTF-8", model, result);
  return result.toString();
 }

 /**
  *
  * @param velocityEngine
  * @param templateLocation
  * @param encoding
  * @param model
  * @return
  * @throws VelocityException
  */
 public static String mergeTemplateIntoString(VelocityEngine velocityEngine,
   String templateLocation, String encoding, Map model)
   throws VelocityException {
  StringWriter result = new StringWriter();
  mergeTemplate(velocityEngine, templateLocation, encoding, model, result);
  return result.toString();
 }
}

 

测试代码:

package com.unutrip.template.model;

import java.util.Date;

/**
 * 测试的一个定点的對象
 *
 * @author longgangbai
 *
 */
public class Order {
 // 客户
 public String customerName;
 // 订单编号
 public String orderNo;
 // 酒店的名稱
 public String hotelName;
 // 房型编号
 public String roomName;
 // 入住時間
 public Date checkindate;

 public String getOrderNo() {
  return orderNo;
 }

 public void setOrderNo(String orderNo) {
  this.orderNo = orderNo;
 }

 public String getHotelName() {
  return hotelName;
 }

 public void setHotelName(String hotelName) {
  this.hotelName = hotelName;
 }

 public String getRoomName() {
  return roomName;
 }

 public void setRoomName(String roomName) {
  this.roomName = roomName;
 }

 public Date getCheckindate() {
  return checkindate;
 }

 public void setCheckindate(Date checkindate) {
  this.checkindate = checkindate;
 }

 public String getCustomerName() {
  return customerName;
 }

 public void setCustomerName(String customerName) {
  this.customerName = customerName;
 }

}

测试类:

package com.unutrip.template.test;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.time.DateUtils;

import com.unutrip.template.model.Order;
import com.unutrip.template.util.VelocityUtils;

public class VelocityTest {
 public static void main(String[] args) throws Exception {
  String veloctiytmp = "email.vm";
  Map model = new HashMap();

  // 一般的對象
  Order order = new Order();
  order.setCustomerName("wuxc");
  order.setHotelName("汉庭酒家");
  order.setOrderNo("00009");
  order.setRoomName("4567");
  order.setCheckindate(new Date());
  model.put("order", order);

  // 集合對象
  List<Order> orders = new ArrayList<Order>();
  for (int i = 1; i < 6; i++) {
   Order order0 = new Order();
   order0.setCheckindate(DateUtils.add(new Date(),
     Calendar.DAY_OF_MONTH, i));
   order0.setCustomerName("customerName--" + i);
   order0.setHotelName("如家大酒店");
   order0.setOrderNo("001");
   order0.setRoomName("200" + i);
   orders.add(order0);
  }
  model.put("members", orders);

  // 存放Map
  Map membersMap = new HashMap();
  membersMap.put("key", order);
  model.put("membersMap", membersMap);
  System.out.println("From Veclotity ="
    + VelocityUtils.mergeTemplateIntoString(veloctiytmp, model));

 }
}

veclocity的模板文件如下:

编译一个集合和一个Map對象應用

 

<html>
  <body>
     List:
     #foreach($member in $members)
       <li>$member.customerName - $member.orderNo $member.hotelName $member.checkindate??string('yyyy-MM-dd ') </li>
     #end 
    
     <br>
     Map:
     #foreach($member in $membersMap.entrySet())
       <li>$member.key - $member.value.customerName  $member.value.hotelName  $member.value.roomName</li>
     #end
  </body>
</html>

 

Velocity的一个问题:关于時間数字类型必须使用Java代码格式化显示.

 

分享到:
评论

相关推荐

    Velocity Web应用开发

    - **易于维护**:遵循 MVC(Model-View-Controller)模式,使得业务逻辑和表示层分离,易于维护。 - **数据访问便捷**:可以通过简单的语法访问 Java 对象的数据和方法。 - **一致性**:不仅用于 Web 页面渲染,还...

    Velocity模板应用案例

    【Velocity模板应用...总结来说,Velocity是一个强大的模板引擎,它简化了Web开发中的动态内容生成,使开发者能够更高效地组织和管理应用的视图层。通过熟练掌握Velocity的使用,可以提升项目的可维护性和开发效率。

    velocity-1.5.jar,velocity-1.6.2-dep.jar,velocity-tools-1.3.jar

    Velocity的主要优点在于其简单易用和高度可扩展性,使得开发者能够将业务逻辑与表现层分离,提高代码的可读性和维护性。以下是关于这三个JAR文件的详细知识点: 1. **velocity-1.5.jar**: 这是Velocity的1.5版本...

    Velocity本地化应用举例

    Velocity是Apache软件基金会的一个开源项目,它是一款强大的模板引擎,常用于Java应用程序中的视图层。Velocity通过将逻辑与表示分离,使得开发者可以专注于业务逻辑,而设计师则可以专心于页面设计。本篇文章将深入...

    Velocity+Spring 2[1].0+Hibernate的Web应用开发框架

    随着互联网技术的发展,Web 应用系统的复杂度不断提高,为了更好地组织和管理应用程序,MVC(Model-View-Controller)架构逐渐成为主流。在这一背景下,多种框架和技术应运而生,为开发者提供了更多选择。其中,...

    velocity-tools-view-1.4.jar

    velocity-tools-view-1.4.jar

    velocity的jar包

    3. **上下文(Context)**:Velocity中的Context对象是数据传递的桥梁,它连接了应用程序和模板。开发者可以将数据放入Context,然后在模板中访问这些数据。 4. **宏**:Velocity支持宏定义,宏类似于函数,可以在...

    velocity 入门文档及应用源码,很适合做自动代码生成

    将Velocity与Ant结合,可以自定义模板生成符合特定需求的源代码,比如数据库访问层、实体类或者控制器代码。通过这种方式,开发者可以提高工作效率,减少重复工作,并保证代码的一致性。 **文件列表** 1. **...

    三大框架整合 前端视图使用velocity渲染,数据访问层使用hibernate+mysql,

    在IT行业中,构建大型应用程序时,常常需要整合多种框架来实现高效、稳定且易于维护的系统。本项目涉及的关键技术包括Velocity、Spring和Hibernate,以及JPA(Java Persistence API),这些技术都是Java开发中的核心...

    Velocity模板应用

    Velocity是由Apache软件基金会开发的一个开源项目,它基于MVC(Model-View-Controller)设计模式,主要负责View层的实现。Velocity的目标是使开发者能够用简单的模板语言来控制页面的布局和格式,同时将复杂的逻辑...

    Velocity 应用示例

    - **resources** 目录:可能存储 Velocity 配置文件(如 `velocity.properties`),以及应用中使用的资源文件。 - **src/main/java** 目录:包含 Velocity 相关的 Java 类,如控制器、模型类和 velocity 工具类。 - ...

    velocity中文

    Velocity的核心理念是“分离展示层和逻辑层”,这使得开发者能够更专注于应用程序的业务逻辑,而不是页面的呈现细节。 ### 2. Velocity模板语言(VTL) Velocity模板语言是一种标记语言,用于描述如何在模板中插入...

    velocity中文文档 教程

    Velocity是一款开源的Java模板引擎,它允许开发者将HTML页面的呈现逻辑与业务逻辑分离,使得网页设计人员可以专注于页面的布局和样式,而程序员则专注于编写应用程序的后端逻辑。Velocity由Apache软件基金会开发并...

    velocity web开发

    在Web开发领域,Velocity是一个非常重要的模板引擎,它被广泛应用于生成动态网页内容。Velocity由Apache软件基金会开发并维护,是Apache Jakarta项目的一部分。其设计目标是提供一个简单易用但功能强大的工具,用于...

    velocity项目源代码

    Velocity通过将业务逻辑与表示层分离,提高了Web应用程序的开发效率和可维护性。这个【描述】提到的"Velocity_Hibernat项目"显然是一个结合了Velocity和Hibernate的工程,它整合了两个强大的技术,旨在简化数据驱动...

    Velocity资料汇总

    - **MVC模式**:Velocity遵循Model-View-Controller模式,模板作为View层,负责呈现数据,而Controller和Model由Java代码处理。 - **安全**:由于模板不直接操作Java对象,而是通过变量和指令,这降低了模板注入...

    velocity 电子书

    - 在Model-View-Controller架构中,Velocity作为View层,负责展示由Controller处理后的数据。 - 它与Spring、Struts等框架集成,实现高效Web应用开发。 6. **Velocity工具和扩展** - Velocity提供了一些内置工具...

    一套基于SpringMVC+velocity框架的web应用 ,基于注解

    SpringMVC是Spring框架的一部分,它是一个用于构建Web应用程序的轻量级、模型-视图-控制器(MVC)框架。基于注解的SpringMVC允许开发者在控制器类的方法上直接使用注解,如@RequestMapping,@RequestParam等,极大地...

Global site tag (gtag.js) - Google Analytics