Struts2讲义24(转载)

5.6   Struts2 非表单标签简介

除了表单标签之外, Struts2 也提供了很多显示可视化控件的标签,甚至还允许开发人员自定义自己的控件标签。因为这些标签分类比较难,所以又通通归类为非表单标签。对于这些标签中,笔者将自己认为对实际开发工作很有帮助的标签也作一具体介绍。

5.6.1   主题和模板介绍

技术要点

在介绍非表单标签前,有必要介绍 Struts2 中主题和模板这两个概念,因为非表单标签很多都是涉及到 AJAX 技术或除了 JSP 视图外 freemarker velocity 视图技术。在 Struts2 中定义了一些主题和模板来方便开发者使用非表单标签,而又无缝的结合上述几种技术。在这里笔者对它们作一简单介绍,希望读者可以领会这些概念。

主题和模板使用。

Struts2 中主题和模板使用原理。

演示代码

使用主题的 JSP 文件:

Java代码 Struts2讲义24(转载)
  1. <!---------文件名:login.jsp---------->   
  2. <%@taglib prefix="s" uri="/struts-tags"%>   
  3. <html>   
  4. <head>   
  5.          <title>登录页面</title>   
  6.          <s:head/>   
  7. </head>   
  8. <body>   
  9.          <s:form action="Login" theme="simple">   
  10.         <table width="60%" height="76" border="0">   
  11.                 <s:textfield name="username" label="用户名"/>   
  12.                 <s:password name="password" label="密  码" />   
  13.                 <s:submit value="登录" align="center"/>                 
  14.         </table>   
  15.     </s:form>   
  16.     <s:form action="Login" >   
  17.         <table width="60%" height="76" border="0">   
  18.                 <s:textfield name="username" label="用户名"/>   
  19.                 <s:password name="password" label="密  码" />   
  20.                 <s:submit value="登录" align="center"/>                 
  21.         </table>   
  22.     </s:form>   
  23.          <s:form action="Login" theme="css_xhtml">   
  24.                    <table width="60%" height="76" border="0">   
  25.                                      <s:textfield name="username" label="用户名"/>   
  26.                                      <s:password name="password" label="密  码" />   
  27.                                      <s:submit value="登录" align="center"/>                                 
  28.                    </table>   
  29.          </s:form>   
  30.          <s:form action="Login" theme="ajax">   
  31.         <table width="60%" height="76" border="0">   
  32.                 <s:textfield name="username" label="用户名"/>   
  33.                 <s:password name="password" label="密  码" />   
  34.                 <s:submit value="登录" align="center"/>                 
  35.         </table>   
  36.     </s:form>   
  37. </body>   
  38. </html>  
<!---------文件名:login.jsp---------->
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
         <title>登录页面</title>
         <s:head/>
</head>
<body>
         <s:form action="Login" theme="simple">
        <table width="60%" height="76" border="0">
                <s:textfield name="username" label="用户名"/>
                <s:password name="password" label="密  码" />
                <s:submit value="登录" align="center"/>              
        </table>
    </s:form>
    <s:form action="Login" >
        <table width="60%" height="76" border="0">
                <s:textfield name="username" label="用户名"/>
                <s:password name="password" label="密  码" />
                <s:submit value="登录" align="center"/>              
        </table>
    </s:form>
         <s:form action="Login" theme="css_xhtml">
                   <table width="60%" height="76" border="0">
                                     <s:textfield name="username" label="用户名"/>
                                     <s:password name="password" label="密  码" />
                                     <s:submit value="登录" align="center"/>                              
                   </table>
         </s:form>
         <s:form action="Login" theme="ajax">
        <table width="60%" height="76" border="0">
                <s:textfield name="username" label="用户名"/>
                <s:password name="password" label="密  码" />
                <s:submit value="登录" align="center"/>              
        </table>
    </s:form>
</body>
</html>

 

 

使用各主题的页面效果图 5.27

Struts2讲义24(转载)

 

5.27  主题使用范例图

代码解释

1 )在 Struts2 框架中提供了四种主题。分别为“ simple ”、“ xhtml ”、“ css_xhtml ”、“ ajax ”。其中“ xhtml ”主题是缺省显示的。即不显示定义 theme 属性, Struts2 默认为“ xhtml ”主题。在 JSP 中可以像示例中代码所示使用主题。除了像代码中所示在 form 标签中使用 sheme 属性外。还可以在各个标签中使用 theme 属性。

注意: theme 属性是按照特定顺序来确定主题的。如下:

界面标签( Struts2 中除了数据和控制标签之外其它标签都可归类为界面标签,也称之为 UI 标签)中使用 theme 属性指定主题。

表单标签中使用 theme 属性指定主题。

page 范围内命名中使用 theme 属性指定主题。

request 范围内命名中使用 theme 属性指定主题。

session 范围内命名中使用 theme 属性指定主题。

application 范围内命名中使用 theme 属性指定主题。

struts.propertie struts.xml 文件中定义 struts.uti.theme 常量来指定主题。

页面中定义主题按照上述顺序来定义主题,如果在上述中同时多个定义主题。则以第 1 个为准。比如界面标签中有 theme 属性定义,表单标签中又有 theme 属性定义。则以界面标签中定义的 theme 属性为准。

2 simple 主题只是很简单的生成一些 HTMl 的基本元素。图 5.27 中读者也可以看出没有任何文字说明。只是提供一些基础的文本框、按钮。

3 xhtml 主题是默认缺省显示的。它除了 simple 主题一些功能的显示之外,还提供了错误校验、文字等附加功能。

4 css_xhtml 主题其实和 xhtml 主题功能类似。只是又增加了 css 的一些控制。

5 ajax 主题是在前三个主题上又做了深度扩展。它以 ajax 框架 dojo 为基础,增加了很多有关 ajax 的功能。

注意:使用 ajax 主题的 JSP 页面也需要定义 head 标签。原理之前也已记述,可见前面章节中对 head 标签的解释说明。

6 )模板其实是主题中一个个子元素。即多个模板构成 1 个主题。在 Struts2 的源代码包中可以清晰看见主题和模板的关系。比如在笔者的“ struts2-core-2.0.11.1\template ”路径下有所有主题的目录,单击任一目录,可看见一些后缀名为 ftl 文件。如图 5.28

Struts2讲义24(转载)

 

5.28  ajax 目录下模板文件放置示例图

由于 Struts2 默认模板基于 FreeMarker 视图技术。而它的模板文件都是以“ ftl ”为后缀名。因此可以理解为模板文件默认是 FreeMarker 视图技术。除了 FreeMarker 这个默认视图技术之外,笔者也在第一章介绍过 Struts2 还可以使用 velocity JSP 视图技术。如果读者想使用这两种视图技术,则可以使用后缀名为 vm jsp 的模板文件。通常可以在 struts.propertie struts.xml 文件中定义 struts.uti.templateSuffix 常量来制定使用这三种中哪一个视图技术。赋予该常量的值就是三种视图技术的模板文件后缀名: ftl vm jsp