使用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代码

<tiles-definitions>标签内主要的子节点就是<definition>标签,这个标签属性如下:

属性
名称 是否必须 值必须 值类型 说明
name true true java.lang.String

指定将要创建的一个definition bean的访问名称。这个必须有的。

template false true java.lang.String

哪一个文件是模板文件,这个模板文件后面会介绍。

role false true java.lang.String

如果配置了这个值的话,需要role的值相等,这个definition才被有效访问,这个功能我没有深究,也不推荐使用,建议大家建立自己更完善的权限控制管理。当然欢迎朋友们完善role应用的示例,tiles自带role的示例,有兴趣的人去读一下就明白了。

extends false true java.lang.String

继承哪一个definition,值是你要继承的definition的name的值。高使用率的属性。

preparer false true java.lang.String

呵,我没使用,如果你要使用的话,要写一个实现他的Prepare接口的类,作用就是在展现你定义的页面前会先执行你的prepare。

实际上一般按我的例子中的就足够用了,OK,我们继续吧。

3、配置web.xml

多么easy的事情啊,打开你的web.xml,用你的鼠标copy & paster下面的代码并放到你的web.xml的<web-app>节点下。

Xml代码
  1. <context-param>
  2.    <param-name>
  3.      org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG
  4.    </param-name>
  5.    <param-value>
  6.      /WEB-INF/tiles-defs.xml
  7.    </param-value>
  8. </context-param>
  9. <listener>
  10.    <listener-class>
  11.       org.apache.tiles.web.startup.TilesListener
  12.    </listener-class>
  13. </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. <%@ tagliburi="http://tiles.apache.org/tags-tiles"prefix="tiles"%>
  2. <%@ tagliburi="http://java.sun.com/jsp/jstl/core"prefix="c"%>
  3. <htmlxmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <metahttp-equiv="Content-Type"content="text/html; charset=utf-8"/>
  6. <title><tiles:getAsStringname="title"/></title>
  7. <metaname="description"content="信息提示"/>
  8. </head>
  9. <body>
  10. <tableborder="0"width="950"align="center"cellpadding="0"cellspacing="0"bgcolor="#FFFFFF">
  11. <tr>
  12. <td>
  13. <tiles:insertAttributename="header"/>
  14. </td>
  15. </tr>
  16. <tr>
  17. <td>
  18. <%--
  19.  /* 主要信息和操作界面
  20.  *
  21.  */
  22.  --%>
  23. <tablewidth="100%"border="0"cellpadding="0"cellspacing="0">
  24. <c:iftest="${info!=null }">
  25. <tr>
  26. <td>
  27. <tiles:insertAttributename="info"/></td>
  28. </tr>
  29. </c:if>
  30. <tr>
  31. <td>
  32. <tiles:insertAttributename="body"/>
  33. </td>
  34. </tr>
  35. </table>
  36. <%--
  37.  //主信息和操作界面结束。
  38.  --%>
  39. </td>
  40. </tr>
  41. <tr>
  42. <td>
  43. <tiles:insertAttributename="footer"/>
  44. </td>
  45. </tr>
  46. </table>
  47. </body>
  48. </html>

特别注意其中<tiles:insertAttribute>和<tiles:getAsString>两个节点,getAsString如下:

属性
名乐 是否必须 值必须 值类型 说明
name true true java.lang.String

属性名称,引用definition attribute的名称

ignore false true boolean

如果设为true,如果发生异常什么的,就给出空白内容。默认为false,会给出cause。

role false true java.lang.String

别用了吧,有兴趣的人去看吧,不推荐使用。

insertAttribute的属性如下:

属性
名称 必须 值必须 值类型 说明
name false true java.lang.String

要插入的属性名称,如果value有值,将被忽略.

value false true java.lang.Object

如果有值,会被直接使用,一般我不太直接用,如果直接用的话,一般也是直接给一个jsp文件的相对content路径。

flush false false boolean

在插入这个页面前先把out stream进行一次flush干净操作。

ignore false true boolean

同getAsString的解释。

role false true java.lang.String

不推荐使用。说n次了。下同

preparer false true java.lang.String 同上

因为我用了一个表格作范例,用表格区格开了body、footer、header、info的定义。其中info是否展现,又采用了c标签和EL语句。你要想写个更简单的页面例子,也可以,为了方便理解,我拿一个tiles官方的layout大家看一下:

Html代码
  1. <%@ tagliburi="http://tiles.apache.org/tags-tiles"prefix="tiles" %>
  2. <tableborder="2"width="300"bordercolor="Gray">
  3.     <tr>
  4.        <tdbgcolor="Blue"><strong><tiles:getAsStringname="title"/></strong></td>
  5.     </tr>
  6.     <tr>
  7.       <td><tiles:insertAttributename="header"/></td>
  8.     </tr>
  9.     <tr>
  10.       <td><tiles:insertAttributename="body"/></td>
  11.     </tr>
  12. </table>

5、Hello World一下

header.jsp

Html代码

info.jsp

Html代码

body.jsp

Java代码

footer.jsp

Html代码

6、页面标签

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

hello.jsp

Html代码

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

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

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

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

你可能感兴趣的:(struts,servlet,header,layout,Webwork,border)