Struts2讲义24
5.6 Struts2非表单标签简介
除了表单标签之外,Struts2也提供了很多显示可视化控件的标签,甚至还允许开发人员自定义自己的控件标签。因为这些标签分类比较难,所以又通通归类为非表单标签。对于这些标签中,笔者将自己认为对实际开发工作很有帮助的标签也作一具体介绍。
5.6.1 主题和模板介绍
技术要点
在介绍非表单标签前,有必要介绍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。
http://dl.iteye.com/upload/attachment/155407/febaec5b-7d49-3370-b7c2-0edbe1ebe27f.jpg
图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。
http://dl.iteye.com/upload/attachment/155409/7c7c5163-e596-3d71-adb1-5a90caa8953a.jpg
图5.28 ajax目录下模板文件放置示例图
由于Struts2默认模板基于FreeMarker视图技术。而它的模板文件都是以“ftl”为后缀名。因此可以理解为模板文件默认是FreeMarker视图技术。除了FreeMarker这个默认视图技术之外,笔者也在第一章介绍过Struts2还可以使用velocity和JSP视图技术。如果读者想使用这两种视图技术,则可以使用后缀名为vm和jsp的模板文件。通常可以在struts.propertie或struts.xml文件中定义struts.uti.templateSuffix常量来制定使用这三种中哪一个视图技术。赋予该常量的值就是三种视图技术的模板文件后缀名:ftl、vm、jsp。
页:
[1]