Struts 与 Velocity 的集成3

来源:互联网 发布:k means php 编辑:程序博客网 时间:2024/05/22 03:14

清单 4 是一个没有 JSP 或 Struts 标记的典型的 HTML 页面。但是,以下元素看起来可能不是那么熟悉:

    * (1)用 $!errors.msgs() 得到错误消息队列中的错误消息。
    * (2)用 $link.setAction(’/search’) 获得搜索转发的 URL。

这就成功了 —— 模板剩下的部分看起来几乎与以前熟悉的 HTML 文件相同。清单 5 显示了应用程序结果页面的模板。

清单 5. 结果页面的 Velocity 模板


<html>
  <body>

  <h1>Book Details</h1>
  <a href=”$link.setForward(”searchEntry”)”>Search again</a> |(1)

  <h3>$book.title</h3> |(2)

    <b>ISBN:</b>$book.isbn<br>|(3)
    <b>Title:</b>$book.title<br>|(4)
    <b>Author:</b>$book.author<br>|(5)
    <b>Price:</b>$book.price<br>|(6)
    <b>No Pages:</b>$book.pages<br>|(7)
    <b>Description:</b>$book.description<br>|(8)
    <b>Publisher:</b>$book.publisher<br>|(9)
  </body>
<html>


可以注意到,清单 5 中不包含 JSP 标记或 Struts 标记。我们来详细看看它:

    * (1)用 Struts 的链接工具把 <a> 标记的 href 设置为 Struts 转发。
    * (2)访问 $book title 属性。
    * (3)访问 $book isbn 属性。
    * (4)再次访问 $book title 属性。
    * (5)访问 $book author 属性。
    * (6)访问 $book price 属性。
    * (7)访问 $book pages 属性。
    * (8)访问 $book description 属性。
    * (9)访问 $book publisher 属性。

讨论

这就是把 Struts 与 Velocity 模板引擎集成的全部工作。表面看起来非常简单(实际上也很简单),但是请想想是什么让这个集成能够工作的呢?

Struts 动作映射可以定义任何视图,不仅限于 JSP。在这篇文章中,我只是把动作映射修改为以 vm 结尾而不是以 jsp 结尾的返回文件。然后,我声明了 Velocity servlet,并告诉 Servlet 容器把以 vm 结尾的文件发送给 VelocityViewServlet。

VelocityViewServlet 把 Velocity 命令表示成 HTML 响应。通过这种方式,VelocityViewServlet 充当了视图响应的拦截器。Struts 控制器把视图转发给 VelocityViewServlet,后者在向客户端发送响应之前处理 vm 文件。请参阅 参考资料 获得关于将 Velocity 视图集成进 Struts 应用程序的更多内容。


   


结束语

正如在本文中看到的,Struts 与 Velocity 的集成很简单。只需五个步骤就可以把所有东西连在一起。针对不同的引擎和场景,采用模板引擎而不是 JSP 的优势各有不同。在 Velocity 的情况下,优势就是简单性、容易学习以及更好的性能。




<?xml version=”1.0″ encoding=”ISO-8859-1″ ?>

<!DOCTYPE struts-config PUBLIC
“-//Apache Software Foundation//DTD Struts Configuration 1.1//EN”
“http://jakarta.apache.org/struts/dtds/struts-config11.dtd”>

<struts-config>
<form-beans>
<form-bean name=”searchForm” type=”org.apache.struts.validator.DynaValidatorForm”>
<form-property name=”isbn” type=”java.lang.String”/>
</form-bean>

</form-beans>

<global-forwards type=”org.apache.struts.action.ActionForward”>
<forward name=”welcome” path=”/welcome.do”/>
<forward name=”searchEntry” path=”/searchEntry.do”/>
<forward name=”searchSubmit” path=”/searchSubmit.do”/>
</global-forwards>

<action-mappings>
<action path=”/welcome” forward=”/WEB-INF/pages/welcome.htm”/>

<action path=”/searchEntry” forward=”/WEB-INF/pages/search.vm”/>

<action path=”/searchSubmit”
type=”ca.nexcel.books.actions.SearchSubmit”
input=”/searchEntry.do”
validate=”true”
name=”searchForm”>
<forward name=”success” path=”/WEB-INF/pages/detail.vm”/>
<forward name=”failure” path=”/WEB-INF/pages/search.vm”/>
</action>

</action-mappings>

<plug-in className=”org.apache.struts.validator.ValidatorPlugIn”>
<set-property property=”pathnames” value=”/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml”/>
</plug-in>

</struts-config> 

原创粉丝点击