`

Struts2与Velocity模板

阅读更多


Velocity是一种基于JAVA的模板引擎,开发人员使用简单的模板语言就可以快速开发显示层,它使得显示层与程序代码分离,在早期的Webwork版本中,所有UI标签均使用Velocity模板引擎生成,可以在Struts-core-2.0.8.jar中找到template文件夹,其中的archive文件夹下存放着原有的vl文件!

Struts2中查找vm文件的顺序先查找Web应用程序,再查找类路径。如果你需要使用vm作为显示层,只需要在配置文件中指定resulttype属性为velocity,然后将<param>location属性指定到一个以vm结尾的资源上就可以了!


1.Struts2中的Velocity中文乱码的处理方式:

因为在Velocity-1.4.jar中的org.apache.velocity.runtime.defaults中定义的velocity.properties中定义的input.encoding=ISO8859-1output.encoding=ISO8859-1,通常最好在VM文件中使用%{getText(‘’)}调用国际化资源文件的内容就不会产生乱码。

2.Velocityvm文件必须要经过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>
分享到:
评论

相关推荐

    使用了Struts结构和Velocity模板技术的BLOG

    使用了Struts结构和Velocity模板技术的BLOG

    struts2整合velocity

    一个简单的struts2 整合 velocity 模板的例子

    struts2Velocity.zip_velocity

    一份Struts2中Velocity模板的程序。

    struts2整合velocity含源码

    这是我自己整合struts2结合velocity的完整实例,含源码完整,下载几个使用,希望对大家有帮助

    Velocity语法以及整合struts2总结

    Struts2是一个流行的MVC框架,它默认支持多种视图技术,包括Velocity模板。在Struts2中整合Velocity,主要涉及以下几个步骤: 1. **配置Struts2**:在`struts.xml`配置文件中,需要指定`struts.velocity....

    Struts2+Spring+Velocity项目

    java 采用struts2+spring+velocity模板项目。

    Velocity实现模板(详细步奏)

    在实际应用中,Velocity 可以与各种框架集成,例如与 Struts MVC 框架结合,将 Velocity 作为视图组件,实现模型-视图-控制器架构中的视图层。这有助于保持代码的整洁和模块化,提高可维护性。 Velocity 还支持模板...

    velocity学习笔记与struts2整合

    在Velocity模板(`.vm`文件)中,你可以使用类似以下的语法来插入动态内容: ```vm Welcome $name to Javayou.com! today is $date. ``` 在Java代码中,例如`HelloVelocity`类,你需要初始化Velocity引擎,加载...

    cj_easyui_combobox_struts_velocity.docx

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

    Velocity+Struts 配置

    Velocity可用来从模板产生web 页面,SQL, PostScript以及其他输出。他也可用于一个独立的程序以产生源代码和报告,或者作为其它系统的一个集成组件。这个项目完成后,Velocity将为Turbine web 应用程序框架提供模板...

    Struts2源码分析

    视图呈现可以通过FreeMarker、JSP或Velocity等模板技术实现,对应的包分别是`org.apache.struts2.views.freemarker`、`org.apache.struts2.views.jsp`和`org.apache.struts2.views.velocity`。 配置相关的类位于`...

    struts+spring+velocity

    采用struts+spring,以及手写封装类组装数据到vo模型,采用velocity模板渲染数据,采用spring的注解对action,server,dao层,

    velocity笔记

    【Velocity模板语言(VTL)详解】...通过以上步骤,我们可以将Struts2与Velocity结合,实现动态网页的生成。Velocity模板语言的简洁性和易学性使得非程序员也能快速上手,提高开发效率,同时保持了代码的清晰和可维护性。

    struts2教程(完全版)

    如`velocity.properties`、`struts-default.vm`和`struts-plugin.xml`,分别对应Velocity模板引擎的配置、默认模板和插件配置。 三、MyEclipse中的Struts2支持 1. **XML提示配置**: 要在MyEclipse中启用Struts2...

    struts2 result配置详解

    Struts2 Result 配置详解 Struts2 框架中 Result 配置是一种非常重要的配置,它直接影响着应用程序的执行结果。Result 配置通常用于定义 Action 的执行结果,例如将结果.redirect 到一个新的 URL,或者将结果....

    struts2源代码分析

    最后,`org.apache.struts2.views`包支持不同类型的视图渲染,如FreeMarker、JSP和Velocity,这使得开发者可以选择适合的模板引擎来构建视图层。 综上所述,Struts2的工作流程大致如下:请求到达服务器后,...

    struts2参考文档(word版)

    第九章可能讲解Struts2与其他框架的集成,如Spring、Hibernate等,以及如何构建完整的MVC架构。 最后,文档可能包含了一些实战示例,引导读者从零开始搭建一个完整的Struts2项目,通过实际操作加深对理论知识的理解...

    Struts2属性文件详解

    Struts2属性文件详解 struts.configuration 该属性指定加载Struts 2配置文件的配置文件管理器.该属性的默认值是org.apache.Struts2.config.DefaultConfiguration, 这是Struts 2默认的配置文件管理器.如果需要实现...

    Struts2入门教程(全新完整版)

    处理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 三、在...

Global site tag (gtag.js) - Google Analytics