Velocity是一种基于JAVA的模板引擎,开发人员使用简单的模板语言就可以快速开发显示层,它使得显示层与程序代码分离,在早期的Webwork版本中,所有UI标签均使用Velocity模板引擎生成,可以在Struts-core-2.0.8.jar中找到template文件夹,其中的archive文件夹下存放着原有的vl文件!
在Struts2中查找vm文件的顺序先查找Web应用程序,再查找类路径。如果你需要使用vm作为显示层,只需要在配置文件中指定result的type属性为velocity,然后将<param>的location属性指定到一个以vm结尾的资源上就可以了!
1.Struts2中的Velocity中文乱码的处理方式:
因为在Velocity-1.4.jar中的org.apache.velocity.runtime.defaults中定义的velocity.properties中定义的input.encoding=ISO8859-1,output.encoding=ISO8859-1,通常最好在VM文件中使用%{getText(‘’)}调用国际化资源文件的内容就不会产生乱码。
2.Velocity的vm文件必须要经过Action才可以访问,以便被程序解析,不可以直接访问vm文件。
3.在vm文件中使用Struts2的标签只需要在原有标签前加#s就可以了,参数之间使用””分隔!
(1.)例如下面是一个表单的定义:
#sform(“action=Student” namespace=”/ilkj/student”)
#stextfield(“label=%{getText(‘student.label.name’)}” “name=student.name”)
#spassword(“label=%{getText(‘student.label.password’)} ” name=student.age”)
#ssubmit(“value=getText(‘globale.label.submit’)”)
#end
(2.)下面是取出session中的一个参数的值
#sproperty(“value=#session.information” “default=noValue”)
(3.)下面是访问Action中的属性
${student.name},当然你也可以简单写成$student.name的形式。
4.Velocity的内建变量:
stack---ValueStack,可以使用${stack.findString(‘OGNL表达式’)}取值
action---最近执行的Action,例如${action.getStudent().getName()}或者也可以直接写${action.student.name}
response---HttpServletRequest
request---HttpServletResponse
session---HttpSession
application---ServletContext
base---生成应用的上下文,相当与request.getContextPath()
5.注释语法
(1.)单行注释:##
(2.)多行注释:#* ... ... *#
6.暂停执行
#stop---停止执行后面的模板内容
7.转义字符
Velocity使用 \ 转义字符,例如email被定义为andrew830314@163.com(#set($email=’andrew830314@163.com’)),你还想输出$email而不被Velocity解析,那么你可以使用 \$email。
8.引入其他文件
#include(“”),如果是JSP或者vm文件将会显示内容,其他文本文件显示文本,二进制会显示乱码,引入多个文件使用 , 间隔,#parse(“”)引入一个本地的vm文件,与#include(“”)不同,#parse(“”)只能引入一个文件,并且#parse(“”)可以访问父模板里的变量。
9.模板代码复用
#macro(代码段名称 $参数1 ... ...)
... ...
#end
只要使用#代码段名称($参数1 ... ...)就可以使用这段代码,当然你也可以不使用任何参数
10.判断语句
#if(逻辑表达式)
注意:在Velocity中使用==判断两个变量是否相等,而不是使用equals(“”)方法。
#else
#end
从上面我们还可以总结出,Velocity模板引擎使用#表示一种命令,例如#set是给某个变量设置值,使用$引用变量,使用()表示参数,使用{}表示作用范围。
另外需要注意的时候,Velocity只会按照gettXXX()解析变脸变量,例如student.name实际上找到的student.getName()方法,你可以试着在Action写一个变量而不使用getXXX()方法,看看会不会在vm中取到值,答案是变量会被原样输出。
Velocity使用的都是对象,即使你定义#set ($count=1)也会被包装成Integer使用。
另外,修改vm文件需要重新启动服务器,如果在开发阶段,我们可以设置struts.properties中的struts.devMode=true避免每次重新启动服务器。
最后我们思考一下,如果货币$2.95会被Velocity引擎直接输出,还是去查找2.95这个变量?如果你在思考这个问题,说明你的JAVA基础不过关哦!因为JAVA中的变量不能以数字开头的哦!因此你不必担心货币$2.95会被当作变量解析!另外,如果Velocity引擎未找到变量也会原样输出,例如${student.name}如果未找到会直接原样输出,这也是为什么我们直接访问JSP的时候会看到大量的${}被原样输出。如果变量不存在,你想让它不输出,可以这样写$!{}
使用Struts2整合Velocity或者FreeMarker配置如上的Servlet就可以在模板引擎中使用Struts2的标签了。
不需要在模板页面中像JSP那样引用,前缀都是s在Velocity使用#s...在FreeMarker使用@s. ..。
Velocity:
HTML code
<html>
<head>
<title>UI Tags Example</title>
#shead()
#sxhead()
</head>
<body>
#surl ("id=url" "value=index.jsp")
<a href="${url}">Back to index.jsp</a>!
#sform ("action=exampleSubmitVelocity" "method=post" "enctype=multipart/form-data")
#stextfield ("label=Name" "name=name")
#sxdatetimepicker ("label=Birthday" "name=birthday")
#sxdatetimepicker ("label=Wake up time" "name=wakeup" "type=time")
#stextarea ("label=Biography" "name=bio" "cols=20" "rows=3")
#sselect ("label=Favourite Color" "list={'Red', 'Blue', 'Green'}" "name=favouriteColor" "emptyOption=true" "headerKey=None" "headerValue=None")
#sselect ("label=Favourite Language" "list=favouriteLanguages" "name=favouriteLanguage" "listKey=key" "listValue=description" "emptyOption=true" "headerKey=None" "headerValue=None")
#scheckboxlist ("label=Friends" "list={'Patrick', 'Jason', 'Jay', 'Toby', 'Rene'}" "name=friends")
#scheckbox ("label=Age 18+" "name=legalAge")
#sdoubleselect ("label=State" "name=region" "list={'North', 'South'}" "value='North'" "doubleValue='Florida'" "doubleList=top == 'North' ? {'Oregon', 'Washington'} : {'Texas', 'Florida'}" "doubleName=state" "headerKey=-1" "headerValue=---------- Please Select ----------" "emptyOption=true" )
#sdoubleselect ("label=Favourite Vehical" "name=favouriteVehicalType" "list=vehicalTypeList" "listKey=key" "listValue=description" "value='MotorcycleKey'" "doubleValue='YamahaKey'" "doubleList=vehicalSpecificList" "doubleListKey=key" "doubleListValue=description" "doubleName=favouriteVehicalSpecific" "headerKey=-1" "headerValue=---------- Please Select ----------" "emptyOption=true" )
#sfile ("label=Picture" "name=picture")
#soptiontransferselect ("label=Favourite Cartoons Characters" "name=leftSideCartoonCharacters" "leftTitle=Left Title" "rightTitle=Right Title" "list={'Popeye', 'He-Man', 'Spiderman'}" "multiple=true" "headerKey=headerKey" "headerValue=--- Please Select ---" "emptyOption=true" "doubleList={'Superman', 'Mickey Mouse', 'Donald Duck'}" "doubleName=rightSideCartoonCharacters" "doubleHeaderKey=doubleHeaderKey" "doubleHeaderValue=--- Please Select ---" "doubleEmptyOption=true" "doubleMultiple=true" )
#ssubmit()
#sreset()
#end
#sa("href=${url}")Back to index.jsp#end
</body>
</html>
FreeMarker:
HTML code
<@s.form action="test">
<@s.textfield label="Name" name="name"/>
<@s.select label="Birth Month" headerValue="Select Month" list="months" />
</@s.form>
分享到:
相关推荐
在Struts2与Velocity集成的过程中,首先需要在Struts2的配置文件中指定Velocity作为视图解析器。这通常是在struts.xml文件中添加一个`<result>`标签,并设置类型为`velocity`,如下所示: ```xml <result type="...
本项目“使用了Struts结构和Velocity模板技术的BLOG”旨在演示如何结合这两种技术来创建一个功能完善的博客系统。 **Struts框架** Struts是一个基于MVC(Model-View-Controller)设计模式的Java Web框架。它为...
将Struts2与Velocity整合,可以实现更高效、更灵活的视图渲染。 **1. Struts2框架介绍** Struts2是Apache软件基金会下的开源项目,它是基于MVC设计模式的Java Web框架。它的核心是Action类,负责处理用户的请求,并...
在Struts2与Velocity整合的例子中,可能会用到预处理或后处理的拦截器。 6. **Action与视图的通信**:Struts2使用ValueStack管理Action上下文中的对象,这些对象可以直接在Velocity模板中通过OGNL表达式访问。例如...
- 访问`http://yourserver/yourapp/yourAction`,Struts2会根据配置将请求转发给相应的Action,Action执行后返回的数据将与Velocity模板结合,生成最终的HTML响应。 7. **优势与应用**: - Struts2提供了强大的...
Struts2和Velocity是两种广泛应用于Java Web开发的技术。Struts2是一个强大的MVC(Model-View-Controller)框架,而Velocity则是...这是一个很好的实践案例,对于深入理解和掌握Struts2与Velocity的整合有极大的帮助。
**整合Struts2与Velocity:** 整合Struts2和Velocity主要是为了让Struts2的动作类(Action)能够与Velocity模板进行交互。在Struts2的配置文件中,我们需要指定一个Result类型为"velocity",这样当Action执行完毕后...
在Struts2与Velocity结合使用时,通常会将Velocity模板作为Action执行后的Result,这样Action处理完业务逻辑后,会将控制权交给Velocity模板来生成最终的HTML响应。开发者可以利用Struts2的Action和Interceptor来...
Struts2 和 Velocity 是两种广泛应用于Java Web 开发中...在提供的压缩包文件 "Velocity" 中,可能包含了使用Velocity模板的示例或模板文件,这可以帮助开发者更好地理解和学习如何在Struts2项目中集成和使用Velocity。
Struts2和Velocity是两个非常重要的Java开源框架,...在实际开发中,确保正确配置Struts2的Action和拦截器,以及Velocity模板,是成功的关键。同时,合理组织项目结构,选择合适的jar包,也是保证项目顺利运行的基础。
Struts2与Velocity结合使用,可以实现更高效、更灵活的视图层渲染。 在Struts2框架中,Velocity被用作视图技术,因为它的语法简洁,学习曲线平缓,且能够方便地将数据绑定到模板中。Velocity模板语言(VTL)允许...
Velocity模板文件(.vm)通常包含HTML布局和少量的控制逻辑,通过#set、#if、#foreach等指令与Java对象进行交互。 整合Struts2和Velocity,首先需要在Struts2的配置文件(struts.xml)中声明Velocity结果类型。然后...
Struts2与Spring的集成,可以让Spring管理Struts2的Action实例,实现依赖注入,增强Action的可测试性和可维护性。 JSON在前后端通信中扮演了关键角色。通常,Struts2 Action执行完毕后,会返回一个包含业务数据的...
以下是关于Struts2与Velocity集成的一些关键知识点: 1. **配置集成**:在Struts2的配置文件(struts.xml)中,需要声明Velocity结果类型,以便Struts2知道如何处理 Velocity模板。通过添加`<result-type>`标签并指定...
学习和理解Struts2与Velocity的整合,可以帮助开发者更好地掌握Java Web应用的开发流程,提升项目的可维护性和开发效率。通过熟练运用这两者,开发者可以构建出清晰分离的业务逻辑、控制逻辑和视图,从而实现更高效...
开发者可以利用Velocity模板语言编写动态页面,将模型数据与页面元素结合,提供直观且可复用的视图。 在实际操作中,开发者需要按照以下步骤进行: 1. 创建Maven项目,配置pom.xml,添加Spring、Struts2、iBatis和...
在这个"struts2+spring+velocity扩展实例V1版本"中,我们可以看到这三个框架的集成与应用。 首先,Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它的主要职责是处理用户的请求,并将其...
通过阅读源码,我们可以学习如何配置Struts2与Velocity的整合,理解Action如何与Velocity模板交互,以及如何在模板中使用Java对象和方法。此外,还可以了解如何调试和优化这种整合,提升Web应用的开发效率和用户体验...
1. **核心组件与配置**:Struts2的核心组件包括Action、Result、Interceptor等。模板中可能会包含一个基本的struts.xml配置文件,用于定义Action类及其对应的Result。此外,可能还会配置拦截器(Interceptor),如...