除了表单标签之外, Struts2 也提供了很多显示可视化控件的标签,甚至还允许开发人员自定义自己的控件标签。因为这些标签分类比较难,所以又通通归类为非表单标签。对于这些标签中,笔者将自己认为对实际开发工作很有帮助的标签也作一具体介绍。
在介绍非表单标签前,有必要介绍 Struts2 中主题和模板这两个概念,因为非表单标签很多都是涉及到 AJAX 技术或除了 JSP 视图外 freemarker 、 velocity 视图技术。在 Struts2 中定义了一些主题和模板来方便开发者使用非表单标签,而又无缝的结合上述几种技术。在这里笔者对它们作一简单介绍,希望读者可以领会这些概念。
主题和模板使用。
Struts2 中主题和模板使用原理。
使用主题的 JSP 文件:
<!---------文件名: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 。
图 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 。
图 5.28 ajax 目录下模板文件放置示例图
由于 Struts2 默认模板基于 FreeMarker 视图技术。而它的模板文件都是以“ ftl ”为后缀名。因此可以理解为模板文件默认是 FreeMarker 视图技术。除了 FreeMarker 这个默认视图技术之外,笔者也在第一章介绍过 Struts2 还可以使用 velocity 和 JSP 视图技术。如果读者想使用这两种视图技术,则可以使用后缀名为 vm 和 jsp 的模板文件。通常可以在 struts.propertie 或 struts.xml 文件中定义 struts.uti.templateSuffix 常量来制定使用这三种中哪一个视图技术。赋予该常量的值就是三种视图技术的模板文件后缀名: ftl 、 vm 、 jsp 。