`
snoopy7713
  • 浏览: 1152121 次
  • 性别: Icon_minigender_2
  • 来自: 火星郊区
博客专栏
Group-logo
OSGi
浏览量:0
社区版块
存档分类
最新评论

Velocity模版与Ajax灵活应用

阅读更多

一:先简单介绍一下velocity的模版页面

velocity是apache开源组织旗下的一个开源项目,可以到apache的官方网去下载并了解它的语法和用法,非常简单,既方便又易用,主要包括两个jar包,velocity-1.5.jar,velocity-dep-1.5.jar。

velocity的模版是以vm为后缀的,例如我的web应用下有一个模版:/myweb/template/test.vm,它是以$符号来引用 对象,例如我在request中设置了一个名称叫做mydata的attribute,类型为List,list的保存的对象类型为Data.java

public class Data {
private String name = "";
private String sex = "";
private String address = "";
public String getAddress() {
   return address;
}
public void setAddress(String address) {
   this.address = address;
}
public String getName() {
   return name;
}
public void setName(String name) {
   this.name = name;
}
public String getSex() {
   return sex;
}
public void setSex(String sex) {
   this.sex = sex;
}
}

在页面显示时的迭代用法是:

<table>
<tr>
#foreach($data in $!mydata)
<td>$!data.getName()</td>
<td>$!data.getSex()</td>
<td>$!data.getAddress()</td>
#end
</tr>
</table>

用模版犹如建一栋房子,把钢架结构搭好了,就往里边堆东西就可以了。

二:解析velocity模版的实现说明

Velocity引擎对vm模版解释是根据引擎的上下文和模版的路径来进行解析的,从以下的代码可以一览其然,非常简单明了:

首先要初始化一个vm引擎:

   VelocityEngine engine = new VelocityEngine();

再次要初始化vm模版资源的绝对路径,以方便引擎进行解析(黑体部分的属性是必须得有的,vm模版的路径例如第一点中的:/myweb/template/test.vm:):

Properties p = new Properties();
    final String str = vmpath.substring(0, vmpath.lastIndexOf("/"));

    p.setProperty("file.resource.path", request.getSession()
      .getServletContext().getRealPath("")
      + str);
    engine.init(p);

然后就是把request属性等设置在引擎的上下文中,当然也可以把session中的属性也设置进去。

VelocityContext context = new VelocityContext();
   Enumeration enu = request.getAttributeNames();

   while (enu.hasMoreElements()) {
    final String paramName = enu.nextElement().toString();
    context.put(paramName, request.getAttribute(paramName));
   }

最后就是解析模版了:

    template = engine.getTemplate(vmpath.substring(vmpath
      .lastIndexOf("/") + 1));
    template.merge(context, sw);

以下是解析vm模版的全部代码:

import java.io.StringWriter;
import java.util.Enumeration;
import java.util.Properties;

import javax.servlet.http.HttpServletRequest;

import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.exception.ParseErrorException;
import org.apache.velocity.exception.ResourceNotFoundException;

public class VmUtil {

public static String getVmString(HttpServletRequest request, String vmpath) {
   if (null == vmpath || "".equals(vmpath))
    return "";

   // velocity模版的解析引擎
   VelocityEngine engine = new VelocityEngine();

   try {
    Properties p = new Properties();
    final String str = vmpath.substring(0, vmpath.lastIndexOf("/"));

    p.setProperty("file.resource.path", request.getSession()
      .getServletContext().getRealPath("")
      + str);
    engine.init(p);
   } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }

   // velocity的上下文环境变量的设置
   VelocityContext context = new VelocityContext();
   Enumeration enu = request.getAttributeNames();

   while (enu.hasMoreElements()) {
    final String paramName = enu.nextElement().toString();
    context.put(paramName, request.getAttribute(paramName));
   }

   // velocity模版
   Template template = null;
   StringWriter sw = new StringWriter();

   try {
    template = engine.getTemplate(vmpath.substring(vmpath
      .lastIndexOf("/") + 1));
    template.merge(context, sw);
   } catch (ResourceNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (ParseErrorException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }

   return sw.toString();
}

}

三:jsp页面可以用自定义标签的形式来引入vm模版,此做法的目的是利用ajax局部刷新时可以只刷新模版的那部分。

jsp页面中的引入自定义标签时可以将模版的路径作为一个属性进行设置,例如/test.jsp页面中引入:

<showpage:vmpage vmurl="/myweb/template/test.vm"/>

jsp自定义标签的doStateTag或者doEngTag方法都可以调用VmUtil .getVmString(request,vmurl) 来获取解析后的html字符串,然后用out将其输出到页面中去,在此就不再详细介绍jsp自定义标签的用法了。

四:prototype.js框架的应用,主要利用其的ajax框架

prototype.js是一个开源的比较流行的js框架工具包,包括ajax等应用,在此只介绍它部分的ajax用法:

页面局部刷新时用到的function, 传入的参数就是ajax请求局部刷新的url,divName就是要局部刷新的div或者td等,在页面调用时要记得到如prototype.js的脚本集:

function showPage(url,divName)
{
this.g_div_name = divName;
this.success = function (xmlRequest)
{
   var str = xmlRequest.responseText;
   document.getElementById(this.g_div_name).innerHTML = str;
}

this.fail = function (xmlRequest)
{
   alert("paging error!");
}
var xmlRequest = new Ajax.Request(url,{method:"post",parameters:"&timestamp="
      + new Date.getTime(),onSuccess:this.success,onFailure:this.fail});
     
    if (!xmlRequest)
    {
    alert("paging error!");
    }
}

五:页面功能实现的一些简单介绍

本文只是介绍模版和ajax的结合运用,故不提供具体的例子,以下简要说一下servlet。假如有个/test.jsp和一个 /myservlet路径的servlet,为了配合ajax实现局部的刷新,增加一个ajax请求的标志位ajaxFlag 参数,该servlet的servie方法中局部说明如下:

.......

request.setAttribute("mydata",mydata);

.......

String ajaxFlag = request.getParameter("ajaxFlag");

if(null != ajaxFlag &&! "true".equals(ajaxFlag ))

{

        response.setContentType("text/html;charset=UTF-8");

      reponse.getWriter().println(VmUtil .getVmString(request,"/myweb/template/test.vm") );

         return ;//如果是ajax请求,输出后直接返回

}

reponse.sendRedirect("/test.jsp");//非ajax请求,重定向到指定的jsp页面中去。

.......

六:总结

不断追求、勇于进取是我从事该行业的方向标。

http://dev2dev.bea.com.cn/blog/neso/200711/velocity_ajax_06_624.html

 

分享到:
评论

相关推荐

    spring+velocity+ajax带进度条上传文件

    "spring+velocity+ajax带进度条上传文件"是一个综合性的技术应用场景,涉及到Spring框架、Velocity模板引擎以及Ajax技术,旨在提供一个用户友好的文件上传体验,其中包括实时的进度条显示。下面将详细解释这些技术...

    spring+ajax+velocity实现进度条上传

    2. **Ajax**(Asynchronous JavaScript and XML):尽管名字中包含XML,但现在的Ajax更多地是与JSON一起工作,用于创建异步Web应用程序。通过Ajax,可以在不刷新整个页面的情况下更新部分页面内容,提高了用户交互性...

    SSH+Ajax+velocity小型购物商城

    在IT行业中,SSH、Ajax和Velocity是三种非常重要的技术,它们在构建Web应用程序,特别是像“SSH+Ajax+velocity小型购物商城”这样的项目中发挥着关键作用。下面将详细阐述这些技术及其在该项目中的应用。 **SSH...

    struts + spring + hibernate + velocity + ajax + jotm + acegi

    Struts、Spring、Hibernate、Velocity、Ajax、JOTM 和 Acegi 是一组常见的技术栈,它们在构建企业级Java Web应用程序时发挥着关键作用。这些技术各有专长,结合使用可以构建出高效、灵活且安全的系统。接下来,我们...

    NVelocity入门,为服务器与客户端传输xml数据,实现Ajax通信铺平道路

    NVelocity是一个基于.NET平台的模板引擎,它允许开发者将HTML、XML或者其他格式的文本与程序逻辑分离,使得静态页面和动态数据...理解NVelocity的模板语法和如何与Ajax协同工作,对于提升.NET应用的前端体验至关重要。

    Springmvc+mybatis+velocity+easyui+jquery框架

    Velocity将模板语言与应用逻辑分离,允许开发者专注于页面布局和设计,而无需关心数据的获取和处理。Velocity模板语言简洁且易于理解,能够直接嵌入HTML或XML文档中,使得开发者能够快速生成动态内容。 【EasyUI】 ...

    用Velocity改装的jquery+json+springMVC+ibatis简单例子

    在这个项目中,jQuery可能被用来实现页面上的交互功能,如异步数据加载、表单验证或动态更新内容,同时利用AJAX与服务器进行通信,通常通过发送JSON数据进行数据交换。 3. **JSON(JavaScript Object Notation)**...

    org.apache.velocity_1.3.1 jquery 插件

    Apache Velocity 是一个开源的Java模板引擎,它允许开发者将HTML页面设计与业务逻辑分离,使得开发者可以专注于应用程序的逻辑,而设计师则可以专注于页面的视觉呈现。在标题中提到的"org.apache.velocity_1.3.1"是...

    Struts2+velocity jar

    Struts2是一个MVC(Model-View-Controller)框架,它为构建基于Java应用的Web用户界面提供了强大的支持,而Velocity则是一个模板引擎,主要用于生成动态内容,使得开发者可以专注于业务逻辑,而不必关心HTML或其他...

    cj_easyui_combobox_struts_velocity.docx

    在Struts2中,我们将通过Ajax技术动态加载数据,结合Velocity模板语言,实现实时的下拉选项填充。 首先,我们需要在HTML页面中引入jQuery库、EasyUI库以及对应的CSS样式文件。然后,定义一个用于显示Combobox的元素...

    mongo集成spring struts2 json velocity

    总结来说,"mongo集成spring struts2 json velocity"这个项目展示了如何在Java Web开发中整合多种技术,构建一个高效、灵活的应用程序。MongoDB提供了高效的数据库支持,Spring框架带来了强大的企业级特性,Struts2...

    struts2+ajax+jquery

    同时,它支持多种结果类型,包括JSP、FreeMarker、Velocity等模板语言,以及JSON和XML等数据格式。 Ajax,即Asynchronous JavaScript and XML,是一种在无需刷新整个网页的情况下,能够更新部分网页的技术。通过...

    新闻管理系统(Ajax无刷技术)

    Ajax,即Asynchronous JavaScript and XML,是一种创建交互式网页应用的技术,它允许页面在不重新加载整个页面的情况下与服务器交换数据并更新部分网页内容。这种技术极大地提高了用户体验,因为它减少了页面刷新的...

    JSP+SERVLET+AJAX网上书城

    3. JSON交互:Ajax与Servlet之间的数据交换可能使用JSON格式,因为它轻量级且易于解析。 4. 安全性:项目可能使用HTTPS协议保证通信安全,同时对敏感信息如密码进行加密存储。 通过这个“JSP+Servlet+Ajax网上书城...

    struts-ajax-json-struts包

    4. 其他依赖库:可能包括Servlet API、Commons Lang、Freemarker或Velocity模板引擎、OGNL表达式语言等。 使用这些库和插件时,开发者需要在Struts配置文件中定义AJAX和JSON相关的配置,比如指定AJAX结果类型或者...

    struts2+ajax详解pdf清晰

    5. **插件机制:** Struts2有丰富的插件库,如Freemarker模板引擎、Velocity模板引擎、JSON结果类型等,这些插件可以扩展Struts2的功能。 **Ajax技术详解:** 1. **异步通信:** Ajax的核心是XMLHttpRequest对象,...

    JSP数据库数据AJAX无刷新分页

    在实际项目中,为了提高代码复用性和可维护性,我们还会使用模板引擎(如FreeMarker或Velocity)来分离视图和逻辑,使用MVC框架(如Spring MVC)来组织项目结构,以及使用ORM框架(如Hibernate或MyBatis)来简化...

    基于java的开发源码-国产Ajax框架 Buffalo.zip

    - **模板引擎**:支持多种模板引擎,如FreeMarker、Velocity等,便于快速生成动态页面。 - **轻量级**:Buffalo设计简洁,对依赖库的要求较低,易于集成到现有的项目中。 4. **使用流程** 使用Buffalo框架通常...

    struts2+spring3+ibatis2.3+jquery_ajax1.7

    Struts2、Spring3、iBatis2.3和jQuery_AJAX1.7是经典的Java Web开发技术栈,它们各自扮演着不同的角色,构建出高效、灵活的应用系统。Struts2是一个MVC(Model-View-Controller)框架,负责处理用户请求并控制应用...

Global site tag (gtag.js) - Google Analytics