tiles2

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代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <br><!DOCTYPE tiles-definitions PUBLIC  
  3. <br>       "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"  
  4. <br>       "http://tiles.apache.org/dtds/tiles-config_2_0.dtd">  
  5. <br>  
  6. <br><tiles-definitions>  
  7. <br>  
  8. <br>  <!-- 全局配置  -->  
  9. <br>  <definition name="layout" template="/views/layout/layout.jsp">  
  10. <br>      <put-attribute name="title"  value="tiles2用户界面简单示例"/>  
  11. <br>      <put-attribute name="header" value="/views/layout/header.jsp"/>  
  12. <br>      <put-attribute name="info" value="/views/layout/info.jsp"/>  
  13. <br>      <put-attribute name="body"   value="/views/layout/body.jsp"/>  
  14. <br>      <put-attribute name="footer"   value="/views/layout/footer.jsp"/>  
  15. <br>  </definition>  
  16. <br>  <!--示例进行一个扩展配置-->  
  17. <br>  <definition name="business.list" extends="layout">  
  18. <br>    <put-attribute name="title" value="广告效果分析"/>  
  19. <br>    <put-attribute name="body" value="/views/business/adEffect.jsp"/>  
  20. <br>  </definition>  
  21. <br></tiles-definitions>  
  22. <br>  
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2.   
  3. <!DOCTYPE tiles-definitions PUBLIC  
  4.   
  5.        "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"  
  6.   
  7.        "http://tiles.apache.org/dtds/tiles-config_2_0.dtd">  
  8.   
  9.   
  10.   
  11. <tiles-definitions>  
  12.   
  13.   
  14.   
  15.   <!-- 全局配置  -->  
  16.   
  17.   <definition name="layout" template="/views/layout/layout.jsp">  
  18.   
  19.       <put-attribute name="title"  value="tiles2用户界面简单示例"/>  
  20.   
  21.       <put-attribute name="header" value="/views/layout/header.jsp"/>  
  22.   
  23.       <put-attribute name="info" value="/views/layout/info.jsp"/>  
  24.   
  25.       <put-attribute name="body"   value="/views/layout/body.jsp"/>  
  26.   
  27.       <put-attribute name="footer"   value="/views/layout/footer.jsp"/>  
  28.   
  29.   </definition>  
  30.   
  31.   <!--示例进行一个扩展配置-->  
  32.   
  33.   <definition name="business.list" extends="layout">  
  34.   
  35.     <put-attribute name="title" value="广告效果分析"/>  
  36.   
  37.     <put-attribute name="body" value="/views/business/adEffect.jsp"/>  
  38.   
  39.   </definition>  
  40.   
  41. </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代码   收藏代码
  1.     <context-param>  
  2. <br>        <param-name>  
  3. <br>            org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG  
  4. <br>        </param-name>  
  5. <br>        <param-value>  
  6. <br>            /WEB-INF/tiles-defs.xml  
  7. <br>        </param-value>  
  8. <br>    </context-param>  
  9. <br>  
  10. <br>    <listener>  
  11. <br>        <listener-class>  
  12. <br>            org.apache.tiles.web.startup.TilesListener  
  13. <br>        </listener-class>  
  14. <br>    </listener>  
  15. <br>  
  16. <br>  
  1. <context-param>  
  2.   
  3.     <param-name>  
  4.   
  5.         org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG  
  6.   
  7.     </param-name>  
  8.   
  9.     <param-value>  
  10.   
  11.         /WEB-INF/tiles-defs.xml  
  12.   
  13.     </param-value>  
  14.   
  15. </context-param>  
  16.   
  17.   
  18.   
  19. <listener>  
  20.   
  21.     <listener-class>  
  22.   
  23.         org.apache.tiles.web.startup.TilesListener  
  24.   
  25.     </listener-class>  
  26.   
  27. </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代码   收藏代码
  1. <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>  
  2. <br><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>  
  3. <br><html xmlns="http://www.w3.org/1999/xhtml">  
  4. <br>    <head>  
  5. <br>        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  6. <br>        <title><tiles:getAsString name="title" /></title>  
  7. <br>        <meta name="description" content="信息提示" />  
  8. <br>    </head>  
  9. <br>    <body>  
  10. <br>        <table border="0" width="950" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF">  
  11. <br>            <tr>  
  12. <br>                <td>  
  13. <br>                    <tiles:insertAttribute name="header" />  
  14. <br>                </td>  
  15. <br>            </tr>  
  16. <br>            <tr>  
  17. <br>                <td>  
  18. <br>                    <%--  
  19. <br>                    /* 主要信息和操作界面  
  20. <br>                     *  
  21. <br>                     */   
  22. <br>                    --%>  
  23. <br>                    <table width="100%" border="0" cellpadding="0" cellspacing="0">  
  24. <br>                        <c:if test="${info!=null }">  
  25. <br>                            <tr>  
  26. <br>                                <td>  
  27. <br>                                    <tiles:insertAttribute name="info" />                           </td>  
  28. <br>                            </tr>  
  29. <br>                        </c:if>  
  30. <br>                        <tr>  
  31. <br>                            <td>  
  32. <br>                                <tiles:insertAttribute name="body" />  
  33. <br>                            </td>  
  34. <br>                        </tr>  
  35. <br>                  </table>  
  36. <br>                    <%--  
  37. <br>                    //主信息和操作界面结束。  
  38. <br>                     --%>  
  39. <br>                </td>  
  40. <br>            </tr>  
  41. <br>            <tr>  
  42. <br>                <td>  
  43. <br>                    <tiles:insertAttribute name="footer" />  
  44. <br>                </td>  
  45. <br>            </tr>  
  46. <br>    </table>  
  47. <br>    </body>  
  48. <br></html>  
  49. <br>  
  1. <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>  
  2.   
  3. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>  
  4.   
  5. <html xmlns="http://www.w3.org/1999/xhtml">  
  6.   
  7.     <head>  
  8.   
  9.         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  10.   
  11.         <title><tiles:getAsString name="title" /></title>  
  12.   
  13.         <meta name="description" content="信息提示" />  
  14.   
  15.     </head>  
  16.   
  17.     <body>  
  18.   
  19.         <table border="0" width="950" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF">  
  20.   
  21.             <tr>  
  22.   
  23.                 <td>  
  24.   
  25.                     <tiles:insertAttribute name="header" />  
  26.   
  27.                 </td>  
  28.   
  29.             </tr>  
  30.   
  31.             <tr>  
  32.   
  33.                 <td>  
  34.   
  35.                     <%--  
  36.   
  37.                     /* 主要信息和操作界面  
  38.   
  39.                      *  
  40.   
  41.                      */   
  42.   
  43.                     --%>  
  44.   
  45.                     <table width="100%" border="0" cellpadding="0" cellspacing="0">  
  46.   
  47.                         <c:if test="${info!=null }">  
  48.   
  49.                             <tr>  
  50.   
  51.                                 <td>  
  52.   
  53.                                     <tiles:insertAttribute name="info" />                           </td>  
  54.   
  55.                             </tr>  
  56.   
  57.                         </c:if>  
  58.   
  59.                         <tr>  
  60.   
  61.                             <td>  
  62.   
  63.                                 <tiles:insertAttribute name="body" />  
  64.   
  65.                             </td>  
  66.   
  67.                         </tr>  
  68.   
  69.                   </table>  
  70.   
  71.                     <%--  
  72.   
  73.                     //主信息和操作界面结束。  
  74.   
  75.                      --%>  
  76.   
  77.                 </td>  
  78.   
  79.             </tr>  
  80.   
  81.             <tr>  
  82.   
  83.                 <td>  
  84.   
  85.                     <tiles:insertAttribute name="footer" />  
  86.   
  87.                 </td>  
  88.   
  89.             </tr>  
  90.   
  91.     </table>  
  92.   
  93.     </body>  
  94.   
  95. </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代码   收藏代码
  1. <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>  
  2. <br>  
  3. <br><table  border="2"  width="300"  bordercolor="Gray">  
  4. <br>  <tr>  
  5. <br>    <td  bgcolor="Blue"><strong><tiles:getAsString name="title"/></strong></td>  
  6. <br>  </tr>  
  7. <br>  <tr>  
  8. <br>    <td><tiles:insertAttribute name="header"/></td>  
  9. <br>  </tr>  
  10. <br>  <tr>  
  11. <br>    <td><tiles:insertAttribute name="body"/></td>  
  12. <br>  </tr>  
  13. <br></table>             
  1. <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>  
  2.   
  3.   
  4.   
  5. <table  border="2"  width="300"  bordercolor="Gray">  
  6.   
  7.   <tr>  
  8.   
  9.     <td  bgcolor="Blue"><strong><tiles:getAsString name="title"/></strong></td>  
  10.   
  11.   </tr>  
  12.   
  13.   <tr>  
  14.   
  15.     <td><tiles:insertAttribute name="header"/></td>  
  16.   
  17.   </tr>  
  18.   
  19.   <tr>  
  20.   
  21.     <td><tiles:insertAttribute name="body"/></td>  
  22.   
  23.   </tr>  
  24.   
  25. </table>             

 5、Hello World一下

header.jsp

Html代码   收藏代码
  1. <div align="center"><b><i>This is a header</i></b></div>  
  1. <div align="center"><b><i>This is a header</i></b></div>  

 info.jsp

Html代码   收藏代码
  1. <div align="center" style="font-color:red;"><b>%{info}</b></div>  
  1. <div align="center" style="font-color:red;"><b>%{info}</b></div>  

 body.jsp

Java代码   收藏代码
  1. <h3>Hello World!</h3>  
  1. <h3>Hello World!</h3>  

 footer.jsp

Html代码   收藏代码
  1. <div align="center"><b><i>This is a footer</i></b></div>  
  1. <div align="center"><b><i>This is a footer</i></b></div>  

 6、页面标签

在页面当中直接用标签,功能相当强大,我就不多介绍了,直接用一个最通用的例子吧,更多的例子,大家看官方example吧。

hello.jsp

Html代码   收藏代码
  1. <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>  
  2. <br>  
  3. <br><tiles:insertDefinition name="layout" />  
  1. <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>  
  2.   
  3.   
  4.   
  5. <tiles:insertDefinition name="layout" />  

 OK,部置出去,有没有看到大大的“Hello world”。

 

7、我更推荐的方法是在你的Java业务代码中使用

在你可访问ServetRequest对象的业务代码最后加入:

Java代码   收藏代码
  1. //获得Tiles容器  
  2. <br>TilesContainer container = TilesAccess.getContainer(request  
  3. <br>                .getSession().getServletContext());  
  4. <br>//渲染页面,成功执行后,就显示用户界面了。  
  5. <br>container.render(def, request,response);  
  6. <br>  
  1. //获得Tiles容器  
  2.   
  3. TilesContainer container = TilesAccess.getContainer(request  
  4.   
  5.                 .getSession().getServletContext());  
  6.   
  7. //渲染页面,成功执行后,就显示用户界面了。  
  8.   
  9. container.render(def, request,response);  

  

OK,如果有问题,欢迎指出和交流

原文地址:http://blog.csdn.net/yangqicong/article/details/6622819
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值