搭建SSH,从零开始(第N天)—在Struts2中集成Velocity

一,Velocity是什麽?

具体概念在百度中都能找到,不赘述。可以参见http://airport.iteye.com/blog/23634

简单点说,Velocity与JSP类似。就是一个模板技术,通过后台JAVA程序进行变量的计算和赋值,前端模板vm文件使用后台计算的变量排版表示。优点是

1,可以不使用JSP的Taglib,容易扩展

2,完全的界面design和后台分离。互不影响

3,与jsp相比,效率更高

二,Struts2与Velocity的集成方法

参考资料:https://struts.apache.org/docs/velocity.html

1,依赖Jar包导入

最新的Struts2中已经提供了集成Velocity时所需的依赖jar包,集成时需要导入以下Jar包(struts-2.3.20-all\struts-2.3.20\lib)。

・velocity-tools-1.3.jar

・velocity-1.6.4.jar

・commons-collections-3.1.jar

・commons-lang-2.4.jar

2,配置文件Check

检查struts-default.xml文件中Velocity Result是否已配置。

struts-default.xml路径:struts2-core-2.3.20.jar/struts-default.xml

 

3,在Struts2中使用Velocity

1的依赖和2的配置都OK的话,可以直接使用Velocity模板。配置如下,在Result中声明type为velocity并跳转到vm模板

Html代码 

 收藏代码

  1. <action name="testLogin" class="gravehistory.test.struts.LoginAction">  
  2.     <result name="fail">/test/login.jsp</result>  
  3.     <result name="input">/test/login.jsp</result>  
  4.     <result name="success" type="velocity">/test/test-success.vm</result>  
  5. </action>  

test-success.vmHtml代码 

 收藏代码

  1. <html>  
  2. <head>  
  3.     <title>Hello</title>  
  4. </head>  
  5. <body>  
  6.    
  7. Hello, $userName  
  8.    
  9. </body>  

以上userName在LoginAction做为属性被定义Html代码 

 收藏代码

  1. <pre name="code" class="java">public class LoginAction extends ActionSupport {  
  2.     private String userName;  
  3.     private String passWord;  
  4.   
  5.     public void validate() {  
  6.          //省略  
  7.     }  
  8.   
  9.     public String execute() {  
  10.         //useraname的赋值等  
  11.     }  
  12.   
  13.     public String getUserName() {  
  14.         return userName;  
  15.     }  
  16.   
  17.     public void setUserName(String userName) {  
  18.         this.userName = userName;  
  19.     }  
  20.   
  21.     public String getPassWord() {  
  22.         return passWord;  
  23.     }  
  24.   
  25.     public void setPassWord(String passWord) {  
  26.         this.passWord = passWord;  
  27.     }  
  28. }  


</html>

 

4,显示效果:

提交后

 

三,Velocity中自定义Macro的使用和配置

如果Velocity提供的标签不能满足需求,可以基于现有的标签创建新的macro对其进行扩展。macro是可嵌套的。

所谓的macro,可以理解为vm中的一个函数,传入参数,获取处理后的html片段,支持html标签。

1,创建macro文件,定义新的macro

创建文件WEB-INF\vm\macro.vm

Html代码 

 收藏代码

  1. #macro(test $msg)  
  2. <h1>*****$!{msg}*****<h1>  
  3. #end  

2,配置velocity,使其可以使用自定义的macro

velocity的配置文件为velocity.properties,路径为WEB-INF\velocity.properties

配置内容

Html代码 

 收藏代码

  1. velocimacro.library = WEB-INF/vm/macro.vm  

3,vm中使用方法

修改后的test-success.vmHtml代码 

 收藏代码

  1. <html>  
  2. <head>  
  3.     <title>Hello</title>  
  4. </head>  
  5. <body>  
  6.    
  7. Hello, #test($userName)  
  8.    
  9. </body>  
  10. </html>  

4,显示效果

四,其它问题说明

按照之前的的配置和部署在Local环境下,可正常运行。在远程服务器上发现有如下问题:

问题1:提示/test/test-success.vm 找不到

解决方法1:将/test/test-success.vm放在resources目录下,编译至classpath

 

问题2:/test/test-success.vm可以访问,但是自定义macro不起作用

解决方法:之前放在/WEB-INFO下的velocity.properties未被找到,所以将velocity.properties也放在resources目录下

 

问题3:velocity.properties可以被访问,但使用自定macro时,velocity.properties中配置的macro库找不到

解决方法:将macro库放到resources目录下,并修改velocity.properties

修改后的目录结构如下

 不相关链接:http://gravehistory-daipeng.rhcloud.com/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值