Java基于WEB的开发中,在用户界面方面简化开发的工具上,大家的选择习惯性的受一些知名框架的影响去左右。我也不例外,最早时受struts 的影响,使用了tiles,并且很愿意使用这种Tiles的用户界面开发习惯,并且在我的开发团队当中推广这种模式。我觉得采用这种界面开发方法会给我们 团队带来一些便利:
1、美工界面工作可以让更懂用户感受的商务人员与美工交流;2、技术人员专注于业务模型的实现;3、使WBS做得可以更细,测试也可以做得很细;4、以上所有工作可以并行5、有效的组织项目Views层文件管理,方便团队协作。
也许是因为鼎鼎大名的WebWork使用了SiteMesh、鼎鼎大名的Struts在2也使用了SiteMesh,我发现网上对于Tiles2的 应用交流相对较少了,而对于SiteMesh的推荐较多。而我在前期研发J10引擎过程中,对于SiteMesh和Tiles2都进行了应用和比较,以便 于把这一种我偏爱的方式能够继续在我的团队当中采用,在测试和应用了几个案例后,我最后确定加入了Tiles2的开源框架作为用户界面的项目组“标准模式 ”,基于:
1、项目团队成员一直使用Struts 1的tiles,有助于让成员低培训成本进入应用状态;2、tiles2的配置相对于SiteMesh更加快捷简单;3、tiles2的应用更加简单。
tiles可以方便的应用在任何jsp、servlet的项目中,下面我对tiles的应用进行一下介绍,如果有不足的地方,欢迎朋友们进行交流。
1、准备我比较建议大家先到http://tiles.apache.org花十分钟时间读一下他的Getting Started和quickstart文档,很有益。然后点击http://www.apache.org/dyn/closer.cgi/tiles/v2.0.5/tiles-2.0.5-bin.tar.gz下载这份tiles-2.0.5(GA)版本。
2、配置tiles-def.xml如果你曾经使用过tiles,下面这个配置文件很熟吧?如果你没用过,呵,对你来说也是很好理解的吧。
Xml代码 <?xml version="1.0" encoding="UTF-8" ?> <BR><!DOCTYPE tiles-definitions PUBLIC <BR> "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN" <BR> "http://tiles.apache.org/dtds/tiles-config_2_0.dtd"> <BR> <BR><tiles-definitions> <BR> <BR> <!-- 全局配置 --> <BR> <definition name="layout" template="/views/layout/layout.jsp"> <BR> <put-attribute name="title" value="tiles2用户界面简单示例"/> <BR> <put-attribute name="header" value="/views/layout/header.jsp"/> <BR> <put-attribute name="info" value="/views/layout/info.jsp"/> <BR> <put-attribute name="body" value="/views/layout/body.jsp"/> <BR> <put-attribute name="footer" value="/views/layout/footer.jsp"/> <BR> </definition> <BR> <!--示例进行一个扩展配置--> <BR> <definition name="business.list" extends="layout"> <BR> <put-attribute name="title" value="广告效果分析"/> <BR> <put-attribute name="body" value="/views/business/adEffect.jsp"/> <BR> </definition> <BR></tiles-definitions> <BR> <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN" "http://tiles.apache.org/dtds/tiles-config_2_0.dtd"> <tiles-definitions> <!-- 全局配置 --> <definition name="layout" template="/views/layout/layout.jsp"> <put-attribute name="title" value="tiles2用户界面简单示例"/> <put-attribute name="header" value="/views/layout/header.jsp"/> <put-attribute name="info" value="/views/layout/info.jsp"/> <put-attribute name="body" value="/views/layout/body.jsp"/> <put-attribute name="footer" value="/views/layout/footer.jsp"/> </definition> <!--示例进行一个扩展配置--> <definition name="business.list" extends="layout"> <put-attribute name="title" value="广告效果分析"/> <put-attribute name="body" value="/views/business/adEffect.jsp"/> </definition> </tiles-definitions>
<tiles-definitions>标签内主要的子节点就是<definition>标签,这个标签属性如下:
属性名称是否必须值必须值类型说明nametruetruejava.lang.String
指定将要创建的一个definition bean的访问名称。这个必须有的。
templatefalsetruejava.lang.String哪一个文件是模板文件,这个模板文件后面会介绍。
rolefalsetruejava.lang.String如果配置了这个值的话,需要role的值相等,这个definition才被有效访问,这个功能我没有深究,也不推荐使用,建议大家建立自己更完善的权限控制管理。当然欢迎朋友们完善role应用的示例,tiles自带role的示例,有兴趣的人去读一下就明白了。
extendsfalsetruejava.lang.String继承哪一个definition,值是你要继承的definition的name的值。高使用率的属性。
preparerfalsetruejava.lang.String呵,我没使用,如果你要使用的话,要写一个实现他的Prepare接口的类,作用就是在展现你定义的页面前会先执行你的prepare。
实际上一般按我的例子中的就足够用了,OK,我们继续吧。
3、配置web.xml
多么easy的事情啊,打开你的web.xml,用你的鼠标copy & paster下面的代码并放到你的web.xml的<web-app>节点下。
Xml代码 <context-param> <BR> <param-name> <BR> org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG <BR> </param-name> <BR> <param-value> <BR> /WEB-INF/tiles-defs.xml <BR> </param-value> <BR> </context-param> <BR> <BR> <listener> <BR> <listener-class> <BR> org.apache.tiles.web.startup.TilesListener <BR> </listener-class> <BR> </listener> <BR> <BR> <context-param> <param-name> org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG </param-name> <param-value> /WEB-INF/tiles-defs.xml </param-value> </context-param> <listener> <listener-class> org.apache.tiles.web.startup.TilesListener </listener-class> </listener>org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG这是配置 tiles的配置文件,可以配置多个文件,文件之间用逗号分隔即可,文件格式完全相同只是看你团队的WBS需要作调整即可。listener节点是配置一 个tiles的监听器——如果你前面花了十分钟时间读了一下tiles官方的Quick start文档的话,也许你还记得,在Configuration一节介绍了很多个配置方式,你可以随自己喜好选择使用servlet、 listener、filter之一。如果没有看,OK,点击http://tiles.apache.org/tutorial/configuration.html去看一下吧。
4、框架页layout.jsp
Html代码 <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%> <BR><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <BR><html xmlns="http://www.w3.org/1999/xhtml"> <BR> <head> <BR> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <BR> <title><tiles:getAsString name="title" /></title> <BR> <meta name="description" content="信息提示" /> <BR> </head> <BR> <body> <BR> <table border="0" width="950" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF"> <BR> <tr> <BR> <td> <BR> <tiles:insertAttribute name="header" /> <BR> </td> <BR> </tr> <BR> <tr> <BR> <td> <BR> <%-- <BR> /* 主要信息和操作界面 <BR> * <BR> */ <BR> --%> <BR> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <BR> <c:if test="${info!=null }"> <BR> <tr> <BR> <td> <BR> <tiles:insertAttribute name="info" /> </td> <BR> </tr> <BR> </c:if> <BR> <tr> <BR> <td> <BR> <tiles:insertAttribute name="body" /> <BR> </td> <BR> </tr> <BR> </table> <BR> <%-- <BR> //主信息和操作界面结束。 <BR> --%> <BR> </td> <BR> </tr> <BR> <tr> <BR> <td> <BR> <tiles:insertAttribute name="footer" /> <BR> </td> <BR> </tr> <BR> </table> <BR> </body> <BR></html> <BR> <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title><tiles:getAsString name="title" /></title> <meta name="description" content="信息提示" /> </head> <body> <table border="0" width="950" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF"> <tr> <td> <tiles:insertAttribute name="header" /> </td> </tr> <tr> <td> <%-- /* 主要信息和操作界面 * */ --%> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <c:if test="${info!=null }"> <tr> <td> <tiles:insertAttribute name="info" /> </td> </tr> </c:if> <tr> <td> <tiles:insertAttribute name="body" /> </td> </tr> </table> <%-- //主信息和操作界面结束。 --%> </td> </tr> <tr> <td> <tiles:insertAttribute name="footer" /> </td> </tr> </table> </body> </html>
特别注意其中<tiles:insertAttribute>和<tiles:getAsString>两个节点,getAsString如下:
属性名乐是否必须值必须值类型说明nametruetruejava.lang.String
属性名称,引用definition attribute的名称
ignorefalsetrueboolean如果设为true,如果发生异常什么的,就给出空白内容。默认为false,会给出cause。
rolefalsetruejava.lang.String别用了吧,有兴趣的人去看吧,不推荐使用。
insertAttribute的属性如下:
属性名称必须值必须值类型说明namefalsetruejava.lang.String
要插入的属性名称,如果value有值,将被忽略.
valuefalsetruejava.lang.Object如果有值,会被直接使用,一般我不太直接用,如果直接用的话,一般也是直接给一个jsp文件的相对content路径。
flushfalsefalseboolean在插入这个页面前先把out stream进行一次flush干净操作。
ignorefalsetrueboolean同getAsString的解释。
rolefalsetruejava.lang.String不推荐使用。说n次了。下同
preparerfalsetruejava.lang.String同上因为我用了一个表格作范例,用表格区格开了body、footer、header、info的定义。其中info是否展现,又采用了c标签和EL语句。你要想写个更简单的页面例子,也可以,为了方便理解,我拿一个tiles官方的layout大家看一下:
Html代码 <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %> <BR> <BR><table border="2" width="300" bordercolor="Gray"> <BR> <tr> <BR> <td bgcolor="Blue"><strong><tiles:getAsString name="title"/></strong></td> <BR> </tr> <BR> <tr> <BR> <td><tiles:insertAttribute name="header"/></td> <BR> </tr> <BR> <tr> <BR> <td><tiles:insertAttribute name="body"/></td> <BR> </tr> <BR></table> <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %> <table border="2" width="300" bordercolor="Gray"> <tr> <td bgcolor="Blue"><strong><tiles:getAsString name="title"/></strong></td> </tr> <tr> <td><tiles:insertAttribute name="header"/></td> </tr> <tr> <td><tiles:insertAttribute name="body"/></td> </tr> </table>5、Hello World一下
header.jsp
Html代码 <div align="center"><b><i>This is a header</i></b></div> <div align="center"><b><i>This is a header</i></b></div>info.jsp
Html代码 <div align="center" style="font-color:red;"><b>%{info}<str> 相关资源:敏捷开发V1.0.pptx