- 浏览: 1124900 次
- 性别:
- 来自: 火星郊区
博客专栏
-
OSGi
浏览量:0
文章分类
- 全部博客 (695)
- 项目管理 (48)
- OSGi (122)
- java (79)
- Vaadin (5)
- RAP (47)
- mysql (40)
- Maven (22)
- SVN (8)
- 孔雀鱼 (10)
- hibernate (9)
- spring (10)
- css (3)
- 年审 (6)
- ant (1)
- jdbc (3)
- FusionCharts (2)
- struts (4)
- 决策分析 (2)
- 生活 (10)
- 架构设计 (5)
- 破解 (2)
- 狼文化 (4)
- JVM (14)
- J2EE (1)
- 应用服务器 (1)
- 我的链接 (5)
- 数学 (2)
- 报表 (1)
- 百科 (6)
- Flex (7)
- log4j (2)
- PHP (1)
- 系统 (2)
- Web前端 (7)
- linux (6)
- Office (1)
- 安全管理 (5)
- python (2)
- dom4j (1)
- 工作流 (3)
- 养生保健 (4)
- Eclipse (8)
- 监控开发 (1)
- 设计 (3)
- CAS (1)
- ZK (41)
- BluePrint (3)
- 工具 (1)
- SWT (7)
- google (2)
- NIO (1)
- 企业文化 (2)
- Windoes (0)
- RCP (7)
- JavaScript (10)
- UML (1)
- 产品经理 (2)
- Velocity (10)
- C (1)
- 单元测试 (1)
- 设计模式 (2)
- 系统分析师 (2)
- 架构 (4)
- 面试 (2)
- 代码走查 (1)
- MongoDB (1)
- 企业流程优化 (1)
- 模式 (1)
- EJB (1)
- Jetty (1)
- Git (13)
- IPV6 (1)
- JQuery (8)
- SSH (1)
- mybatis (10)
- SiteMesh (2)
- JSTL (1)
- veloctiy (1)
- Spring MVC (1)
- struts2 (3)
- Servlet (1)
- 权限管理 (1)
- Java Mina (1)
- java 系统信息 (6)
- OSGi 基础 (3)
- html (1)
- spring--security (6)
- HTML5 (1)
- java爬虫搜索 (1)
- mvc (3)
最新评论
-
Tom.X:
http://osgia.com/
将web容器置于OSGi框架下进行web应用的开发 -
chenyuguxing:
你好, 为什么我的bundle export到felix工程中 ...
在Apache Felix中运行bundle -
string2020:
<niceManifest>true</ni ...
Bundle Plugin for Maven -
jsonmong:
OSGI,是未来的主流,目前已相当成熟。应用OSGI比较好的, ...
基于OSGi的声明式服务 -
zyhui98:
貌似是翻译过来的,有很少人在linux上做开发吧
如何成为“10倍效率”开发者
一:先简单介绍一下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:"×tamp="
+ 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
发表评论
-
springmvc+velocity 在vm模板上添加通用工具类对象变量
2012-05-29 14:55 2332在平时工作的项目中经常会在vm模板中添加自定义的工具类,由 ... -
struts2 与 velocity 整合 探究
2012-05-29 13:21 1561我这边引出几个问题。 问题1,struts2 是怎么让 v ... -
模板:velocity和freemarker的比较
2012-05-21 17:24 1908/** *作者:张荣华(ahu ... -
velocity初体验
2012-05-14 14:57 1102VelocityServlet: Java代码 ... -
Velocity中VM文件找不到问题的解决
2012-04-14 11:05 1408在Velocity中默认加载vm文件的类是FileResour ... -
Velocity分页模板
2012-04-11 13:08 4997#*宏pageGrid:自定义表格宏${gridInfo} ... -
velocity学习心得
2012-04-11 13:06 1463目录1. 常用的模版技术 21.1. Velocity 21 ... -
Velocity教程
2012-04-11 13:03 1031Velocity是一个基于java的模板引擎(template ... -
eclipse上的几个Velocity插件
2012-04-01 08:54 1490最近在研究XWiki,它是支持Velocity的,所以就顺便调 ...
相关推荐
灵活的组装形式,可以定义网页区块,结合AJAX动态更新局部信息。 3. 集成支付和配送功能 E6Mall集成了第三方支付系统,支持支付宝、贝宝等第三方支付平台;同时集成了配送功能,可根据各第三方物流公司价格体系设计...
Velocity2Js将Velocity模板转换为JavaScript函数。 这些功能可以轻松地集成到任何基于ajax的Web应用程序中。 速度模板中使用的上下文可以作为关联数组(例如JSON)传递。
让你的MVC模式连成一体,而且由于View由浏览器来 处理,大大减少了服务器的负担,用来构建Ajax技术的网络信息系统应用是一个非常好的选择。下面将通过翻译该站的文章来给大家介绍这个JST引擎的使 用。
1.2.4使用javascript与ajax提升用户体验 7 1.3多种集成开发环境 9 1.3.1集成开发环境简介 9 1.3.2web应用服务器说明 11 本章小结 14 课后练习 14 第2章 javaee运行及开发环境 15 2.1jdk的下载与安装 15 ...
Struts 2标签现在可与FreeMarker、Velocity及类似模板引擎配合使用。 · 引入拦截器: Struts 2为拦截器(interceptor)提供了全面支持。拦截器可在Action类执行前后加以执行。拦截器经配置后,可以把工作流程或者...
太过灵活——没有公共的父控制器 没有内置的Ajax支持 Stripe 优点: 不需要书写XML配置文件 良好的学习文档 社区成员很热心 缺点: 社区比较小 不如其他的项目活跃 ActionBean里面的URL是硬编码的 Struts 2 优点...
关于性能:通过与主流模板引擎Freemarker,Velocity以及JSP对比,Beetl均远高于前面三个,这是因为宏观上,通过了优化的渲染引擎,IO的二进制输出,字节码属性访问增强,微观上,通过一维数组保存上下文,合并静态...
vel2js 是velocity2js 的一个分支。 它将 Velocity 模板转换为 Javascript 函数,可以轻松集成到任何基于 ajax 的 Web 应用程序中。 Velocity 模板中使用的上下文可以作为关联数组(例如 JSON)传递。
本系统使用模板引擎Apache Velocity来实现从模型到代码的渲染,使用MySQL数据库来储存模型和模板信息,网页前端使用Vue框架和Ajax技术进行设计。本文对该设计进行了初步的实现,并对代码生成功能进行测试,生成的...
支持更多视图技术(JSP(转译java文件,编译成class文件,才可以运行)、(模板技术,html,把数据和模板html一起以流方式输出)FreeMarker、Velocity) 基于AOP(面向切面编程)思想的拦截器机制,更易扩展(不修改源代码的...
EasyJWeb框架是基于Velocity模板技术的,所有的页面都是静态HTML页面,省略了JSP的编译过程,大大提高了系统的访问速度。EasyJWeb对于中小型的软件项目来说是十分优秀的,内置的Action可以轻易的捕获前台的请求,而...
16.5spring中带有dwr的支持ajax的应用程序 16.5.1直接web远程控制 16.5.2访问spring管理的beandwr 16.6小结 附录a装配spring a.1下载spring a.1.1研究spring发布 a.1.2构建自己的类路径 a.2把spring添加为一...
16.5 Spring中带有DWR的支持Ajax的应用程序 16.5.1 直接Web远程控制 16.5.2 访问Spring管理的Bean DWR 16.6 小结 附录A 装配Spring A.1 下载Spring A.1.1 研究Spring发布 A.1.2 构建自己的类路径 A.2 把...
16.5 Spring中带有DWR的支持Ajax的应用程序 16.5.1 直接Web远程控制 16.5.2 访问Spring管理的Bean DWR 16.6 小结 附录A 装配Spring A.1 下载Spring A.1.1 研究Spring发布 A.1.2 构建自己的类路径 A.2 把...
处理Velocity模板 16 org.apache.struts2.dispatcher.VelocityResult 16 xslt 16 处理XML/XLST模板 16 org.apache.struts2.views.xslt.XSLTResult 16 全局result: 17 动态Result:了解 18 12.异常处理 18 三、在...
8.1.1 页面上:如何使用自定义结果组件构建Struts 2 Ajax应用程序 171 8.1.2 实现JSON结果类型 173 8.2 常用的结果类型 180 8.2.1 RequestDispatcher,也叫做dispatcher 180 8.2.2 ServletRedirectResult,也叫做...
包括最常用的jsp页面,也可以说Velocity和FreeMarker等模板技术中的使用 2.Struts2分类 (1)UI标签:(User Interface, 用户界面)标签,主要用于生成HTML元素标签,UI标签又可分为表单标签非表单标签 (2)非UI...
前端服务过滤器 ...支持java里面的velocity模板的渲染。支持layout。 Getting started 请确保node版本号支持harmony特性generator(node 0.11以上)。 1.install globally sudo npm install -g qfilter 2.in
作品集 该产品组合网站是使用BOOTSTRAP 3,... 通过研究此项目,您可以了解如何使用Velocity Templates(.vm)使用自定义模板发送邮件 这是我的投资组合网站。 如果您认为此代码将对您有所帮助,请立即将其添加到项目中