频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

整合Java 6脚本、Groovy实现动态 MVC模式(二)

来源: 作者:IT168 seasky 出处:巧巧读书 2008-02-12 进入讨论组
五、通过XSLT实现视图层

    我们已经使用FreeMarker实现了视图层,但这并不唯一的选择,我们还可以有其他的实现方式,如我们可以使用XSLT来达到同样的效果。在开始这一节之前,我们必须将XSLT引擎Jaxen放到classpath中。

    在这个使用XSLT的例子中,我们只需要加一个新的XMLOPERATION节点,它将使用和前面的介绍相同的数据,所不同的是在这里将使用XSLT来代替FreeMarker处理XML。如果我们想让两种方法并存的话,可以加入另一个OPERATIONSET块。我们的WebLEAF配置文件如下:

<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE WADSET SYSTEM "http://www.uib.es/leaf/LEAFwad.dtd"> <WADSET> <WAD NAME="Test" INIT_MODE="INITS_ON_START_UP" XML_ALLOW_SHOW="TRUE" XSLT_NO_CACHE="TRUE" > <OPERATIONSET> <SUFFIX VALUE="fm"/> <XMLOPERATION NAME="showItems" DESCRIPTION="Shows all the items and the selected one" CLASSNAME="org.leaf.XMLOperation" FM_TEMPLATE="item.ftl" > <SOURCES GLOBAL_TAG="XML_APP" > <SOURCE XML_SOURCE="xml/Labels.xml"/> <SOURCE XML_SOURCE="script://scr/Item.groovy/show?w_"/> </SOURCES> </XMLOPERATION> </OPERATIONSET> <OPERATIONSET> <SUFFIX VALUE="xsl"/> <XMLOPERATION NAME="showItems" DESCRIPTION="Shows all the items and the selected one" CLASSNAME="org.leaf.XMLOperation" XSLT_SOURCE="xsl/Item.xsl" > <SOURCES GLOBAL_TAG="XML_APP" > <SOURCE XML_SOURCE="xml/Labels.xml"/> <SOURCE XML_SOURCE="script://scr/Item.groovy/show?w_"/> </SOURCES> </XMLOPERATION> </OPERATIONSET> </WAD> </WADSET>

    为了处理这些新请求,我们需要再次编辑web.xml配置文件,在WebLEAF控制servlet中加入一个以".xls"的请求后缀。也就是在下面再加入一个<servlet-mapping/>标签,web.xml的内容如下:

<?xml version="1.0"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd"> <web-app> <!-- Autoconfiguration servlet --> <servlet> <servlet-name>AutoConfigurer</servlet-name> <servlet-class>org.leaf.util.AutoConfigurer</servlet-class> <load-on-startup>1</load-on-startup> <init-param> <param-name>FILE_NAME.1</param-name> <param-value>WEB-INF/classes/webapp.properties</param-value> </init-param> <init-param> <param-name>NODES_NAME.1</param-name> <param-value>db.location</param-value> </init-param> <init-param> <param-name>PATTERN.1</param-name> <param-value>(.*)/WEB-INF/(.*)</param-value> </init-param> <init-param> <param-name>FORMAT.1</param-name> <param-value>{0}WEB-INF/{1}</param-value> </init-param> <servlet> <servlet-name>WebLEAFController</servlet-name> <servlet-class>org.leaf.LEAFManager</servlet-class> <load-on-startup>2</load-on-startup> </servlet> <!-- End controller servlet --> <servlet-mapping> <servlet-name>WebLEAFController</servlet-name> <url-pattern>*.fm</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>WebLEAFController</servlet-name> <url-pattern>*.xsl</url-pattern> </servlet-mapping> </web-app>
最后,我们通过在Test\WEB-INF\xsl中建立一个item.xsl,这是XSLT的实现,它的内容如下:

<?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="html" indent="yes" media-type="text/html" encoding="iso-8859-1" /> <xsl:variable name="labels" select="/XML_APP/LABELS" /> <xsl:template match="/"> <html> <head> <META HTTP-EQUIV="Expires" CONTENT="now"/> <META HTTP-EQUIV="Pragma" CONTENT="no-cache"/> <META HTTP-EQUIV="Cache-Control" CONTENT="private"/> <title><xsl:call-template name="TITLE"/>(XSLT)</title> </head> <body> <xsl:apply-templates/> <a href="./">Back to index</a> </body> </html> </xsl:template> <xsl:template name="TITLE"> <xsl:value-of select="$labels/@Title"/> <xsl:apply-templates mode="SUB_TITLE"/> </xsl:template> <xsl:template match="ITEM_QUERY[@Type='All']" mode="SUB_TITLE"> - <xsl:value-of select="$labels/ITEM/@Title"/> </xsl:template> <xsl:template match="ITEM_QUERY[@Type='All']"> <xsl:variable name="theItem" select="/XML_APP/ITEM_QUERY[@Type='Selected']/ITEM" /> <fieldset> <legend> <xsl:value-of select="$labels/ITEM/@FieldSetLegend"/> </legend> <form id="itemForm" name="itemForm" action=""> <select id="w_p_ite_code" name="w_p_ite_code" onchange="itemForm.submit();" > <option value=""> <xsl:value-of select="$labels/ITEM/@SelectDefault"/> </option> <xsl:for-each select="ITEM"> <option value="{@Code}"> <xsl:if test="$theItem/@Code = @Code"> <xsl:attribute name="selected"> selected </xsl:attribute> </xsl:if> <xsl:value-of select="@Name"/> </option> </xsl:for-each> </select> </form> <xsl:if test="$theItem"> <b><xsl:value-of select="$labels/ITEM/@Name"/></b>: <xsl:value-of select="$theItem/@Name"/> <br /> <b><xsl:value-of select="$labels/ITEM/@Description"/></b>: <xsl:value-of select="$theItem/@Description"/> </xsl:if> </fieldset> </xsl:template> </xsl:stylesheet>
    现在我们可以再次启动Servlet容器,并访问http://localhost:8080/test/showItems.xsl(注意现在的后缀是".xsl",而不是".fm")。我们看到的结果和前面的完全一样,只是实现的方法不同而已。图 文 结 合:http://www.qqread.com/java/2008/02/f396852.html 更多文章 更多内容请看脚本攻击和防范Java环境安装配置Java编程开发手册专题,或进入讨论组讨论。
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章