五、通过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的内容如下:
最后,我们通过在Test\WEB-INF\xsl中建立一个item.xsl,这是XSLT的实现,它的内容如下:<?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>
<?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>
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
相关专题
- 脚本攻击和防范 (2366篇文章)
- Java环境安装配置 (5640篇文章)
- Java编程开发手册 (8291篇文章)
- J2SE综合:浅谈java程序发布之 jre 篇 (11次浏览)
- JAVA代码中使用魔法数值 (8次浏览)
- Hibernate缓存管理 (6次浏览)
- JAVA代码应该流畅和结构化 (5次浏览)
- Java JVM设置对性能的影响 (4次浏览)
- 开发框架:深入了解 Struts Validator (3次浏览)
- Java中的通信机制及与C/C API的集成 (1次浏览)
- 用Hibernate实现领域对象的自定义字段 (1次浏览)
- Java语言入门 简述Java语言回收机制 (0次浏览)
- 2008年Java开发者最迫切的五个期望 (0次浏览)



