Struts2讲义27(转载)

本文介绍了在Struts2框架中使用Velocity视图技术的方法,包括Velocity的基本语法、模板文件的创建及如何在Struts2中配置使用Velocity。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

6  Struts2JSP 视图技术

在之前的章节中,笔者的代码示例都是用 JSP 来实现的。其实 Struts2 不仅仅支持 JSP 这一种视图技术。作为 MVC 架构中 view 层技术, velocityFreeMarker 视图技术也是很优秀的,近年来很多 Web 系统项目的架构师和开发者都开始放弃使用 JSP 作为 view 层显示技术转向使用 velocityFreeMarker 。因此笔者觉得有必要介绍 Struts2 框架是如何支持这两种视图技术的。希望本章能让读者作为“敲门砖”,敲开这两种视图技术的学习“大门”。

6.1   velocity 视图技术使用介绍

velocity 翻译成中文就是“速度”的意思,它的缩写“ v ”就是物理学中代表速度的符号。由它的名字可以想象出它的设计者对它有什么期望吧。毕竟有时候使用 JSP 来实现 view 层对于开发者来说是件很麻烦又费时的事情。 velocity 就是为开发者节约大量 view 层开发时间而准备的视图技术。它使用模板文件来显示视图界面。除了它自身的书写格式外,模板文件中其他代码就是普通的 html 代码。因此它也是实现松耦合,让美工和开发人员各司其职进行 view 层开发。下面通过示例来介绍它在 Struts2 中的使用方式。

技术要点

本节代码说明 velocityStruts2 中使用方式。

velocity 基本语义和书写格式说明。

模板文件 vm 介绍 。

Struts2 中如何使用 velocity

演示代码

显示数据的 vm 模板文件代码:

Java代码 复制代码
  1. <!---------------文件名: show.vm--------->   
  2. <html>   
  3.     <head>   
  4.     <title>Velocity使用范例</title>   
  5.     <meta http-equiv="content-type" content="text/html; charset=GB2312"/>   
  6.     </head>   
  7.      <body>   
  8.        <h3 align="left">   
  9.             Velocity使用范例   
  10.         </h3>   
  11.        <h1>装修材料信息列表</h1>   
  12.  <table border>   
  13.         <tr align="center">   
  14.           <td>材料名</td>   
  15.           <td>材料价格(单位:元)</td>   
  16.           <td>材料库存量(单位:个)</td>   
  17.         </tr>   
  18.         #foreach($Material in $mList)   
  19.               <tr align="center">   
  20.                   <td>$Material.material</td>   
  21.                   <td>$Material.bid</td>   
  22.                   <td>$Material.mount</td>   
  23.              </tr>   
  24.        #end   
  25.        </table>   
  26.     </body>   
  27. </html>  
<!---------------文件名: show.vm--------->
<html>
    <head>
    <title>Velocity使用范例</title>
    <meta http-equiv="content-type" content="text/html; charset=GB2312"/>
    </head>
     <body>
       <h3 align="left">
            Velocity使用范例
        </h3>
       <h1>装修材料信息列表</h1>
 <table border>
        <tr align="center">
          <td>材料名</td>
          <td>材料价格(单位:元)</td>
          <td>材料库存量(单位:个)</td>
        </tr>
        #foreach($Material in $mList)
              <tr align="center">
                  <td>$Material.material</td>
                  <td>$Material.bid</td>
                  <td>$Material.mount</td>
             </tr>
       #end
       </table>
    </body>
</html>

 

Struts2 的使用 velocityAction 代码:

Java代码 复制代码
  1. <!----------文件名:VelocityAction.java------->   
  2. public class VelocityAction extends ActionSupport{   
  3.          private List mList;   
  4. ………   
  5.          public String execute() throws Exception{   
  6.                    mList = new ArrayList();   
  7.                    for(int i=0;i<4;i++){   
  8.                             Material m = new Material();   
  9.                             m.setMaterial("材料"+(i+1));   
  10.                             m.setMount(10*(i+1));   
  11.                             m.setBid(1.0+(i+1));   
  12.                             mList.add(m);                       
  13.                    }   
  14.                return SUCCESS;                
  15.          }   
  16. }  
<!----------文件名:VelocityAction.java------->
public class VelocityAction extends ActionSupport{
         private List mList;
………
         public String execute() throws Exception{
                   mList = new ArrayList();
                   for(int i=0;i<4;i++){
                            Material m = new Material();
                            m.setMaterial("材料"+(i+1));
                            m.setMount(10*(i+1));
                            m.setBid(1.0+(i+1));
                            mList.add(m);                    
                   }
               return SUCCESS;             
         }
}

 

配置文件对 Action 的配置内容:

Java代码 复制代码
  1. <!--------------文件名:struts.xml------------->   
  2. ………   
  3. <package name="C06.1" extends="struts-default">   
  4.                    <action name="velocity"  
  5.                             class="action.VelocityAction">   
  6.                             <result name="success" type="velocity">/velocity/show.vm</result>   
  7.                    </action>   
  8. </package>  
<!--------------文件名:struts.xml------------->
………
<package name="C06.1" extends="struts-default">
                   <action name="velocity"
                            class="action.VelocityAction">
                            <result name="success" type="velocity">/velocity/show.vm</result>
                   </action>
</package>

 

对支持中文字符的字符编码集设置:

Java代码 复制代码
  1. <!---------------文件名:struts.properties------->   
  2. #支持本地化的资源文件名定义   
  3. struts.i18n.encoding=gb2312  
<!---------------文件名:struts.properties------->
#支持本地化的资源文件名定义
struts.i18n.encoding=gb2312

 

示例效果显示如图 6.1

 

6.1  velocity 显示效果图

代码解释

1 )本节示例是将一些装修材料用 list 形式显示在页面上。如之前笔者讲述的实例完全可以由 JSP 来完成。而该示例是使用 velocity 技术来实现。读者也可以将其理解为一种和 JavaScript 相同的脚本语言。它的语义和语法中有以下几个注意点。

# ”标识:该标识用来表明 velocity 中的控制语句。比如“ #if ”、“ #foreach ”等,都是用来控制流程转向的。

$ ”标识:该标识来表示对象或变量。比如示例中的“ $Material ”。如果这些对象还有自己的属性,则可以在其后面再加“ ., 如示例中的“ $Material .material ”。

{} ”标识:该标识用来为某对象或变量赋具体的值。比如“ {frank}

“!”标识:假设某变量值为 null 或者还没被定义。则在该变量前加上“!”,这样在页面上调用该变量之处一律显示为空白即“ ”。

# ”标识: velocity 语言的注释标识。

2velocity 模板文件后缀名都是“ vm ”结尾。该类型文件中除了可以书写 velocity 自己的语言代码之外,也可以使用 HTMl 语言的标签。在本示例中查看 show.vm 文件就可以知道它和 JSP 文件还是很相像的。而且 Struts2 的标签也可以在 vm 文件中使用, 只需要在原有标签前加“ #s ”就可以了,参数之间使用 “” 分隔。如果读者需要在 vm 文件中引入其他文件,这些被引入文件是 JSP 或者 vm 类型的话,将会显示文件中的定义的各种动态数据。如果是其他类型的文件被引入的话,只是显示这些文件的文本即静态引入。一般是使用“ #inclue (“文件名”)”格式进行 引入。如果需要引入多个文件则在“()”中以“,”相隔。还有个引入文件的书写代码格式是“ #parse ”,这个只能引入 vm 类型文件,而且只能引入一个。不过这样引入也有一个好处,那就是被引入 vm 文件中不仅可以使用它自己定义的变量也可以使用引入它的 vm 文件中的变量。这样引入文件和被引入文件关系有点像 JAVA 中父类和子类关系。还有如果想让界面中显示 velocity 中这些标识,而不被 velocity 解析,那可以在它们前面加上“ \ ”。比如想显示“ $ ”,则可以写成“ \$ ”,这样在“ $ ”后面的内容, velocity 不会将其解析成 velocity 的变量而只是普通文本。

另外需要注意的时候, velocity 只会按照 gettXXX() 解析变量,例如 Material.material 实际上找到的 Material.getMaterial() 方法,读者可以试着在 Action 写一个变量而不使用 getXXX() 方法,看看会不会在 vm 中取到值,答案是变量照样会被输出。

3 )在 Struts2 中使用 velocity 技术,首先要在项目中导入 velocityjar 包,具体 jar 包名请读者参考项目示例。在该示例中 Action 无需过多说明。值得说的是 struts.xml 文件,比如在示例代码中笔者用黑体注明了 result 的返回类型必须是“ velocity ”,这样才可以调用 vm 模板文件。然后就可以像使用 JSP 一样使用 vm 文件显示 Action 的定义的材料 list 数据。

注意:由于 velocity 缺省显示中文字符用的字符编码集合是“ ISO-88591 ”。如果开发中使用的项目字符编码集合不是“ ISO-88591 ”,则需要在 struts.properties 中定义“ struts.i18n.encoding ”为开发中使用的字符编码集。比如在本示例中笔者就定义为“ gb2312 ”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值