struts2标签库介绍:
struts2标签库不依赖任何表现层技术,其提供的大部分标签,可以在各种表现层技术中使用,分为两大类:UI标签和非UI标签,UI标签由于生成html元素标签,非UI标签用于数据访问、逻辑控制等。
UI标签分为两类:表单标签(用于生成form元素,普通表单元素的标签)和非表单标签(生成页面树,Tab页等标签),非UI标签也分为两类:流程控制标签(实现分支、循环登录流程控制标签)和数据访问标签(输出ValueStack中的值,完成国家化等功能的标签)。
struts2的标签库定义文件位于struts2-core-XXX.jar的META_INF文件下,文件名为:struts-tag.tld。可查看该文件定义的标签库。在jsp中使用struts2标签库:
<%@taglib prefix="s" uri="/struts-tags"%>
使用具体标签:
<s:xxx .../>
OGNL表达式语言介绍:
OGNL是一种数据访问语言,用于访问对象,数组,集合,OGNL会假设只有一个"根"对象。
eg1,访问方法:
#foo.blah//返回foo.getBlah()方法的返回值
#bar.blah//返回bar.getBlah()方法的返回值
#blah//返回foo.getBlah()方法的返回值
#bar.foo.blah//返回bar.getFoo().getBalh()方法的返回值
eg2:访问实例属性:
#person.name
eg3:索引访问:
[0].name
[1].name
eg4:命名对象属性访问:
#parameters.xxx//用于访问HTTP请求参数
#request.xxx//用于访问HTTPServletRequest属性
#session.xxx//用于访问HttpSession属性
#attr.xxx//依次搜索PageContext、HTTPServletRequest、HttpSession、ServletContext中的属性
OGNL中集合操作:
创建List类型集合语法:
#{e1,e2,e3…}
创建Map类型集合语法:
#{key1:value1,key2,value2…}
访问静态成员:
OGNL默认不能访问静态方法,若要访问静态,应开启:
<constant name="struts.ognl.allowStaticMethodAccess" value="true">
开启后则可以通过语法访问:
@类名@静态方法(参数…)
jsp访问示例:
<s:property value="@java.lang.Math@random()"/>
<s:property value="@java.lang.Math@PI">
控制标签:
if:用于控制选择输出标签
elseIf/elseif:与if标签结合使用
else:与if标签结合使用
append:用于将多个集合拼接成一个新的集合
generator:字符串解析器,将一个字符串解析成一个集合
iterator:迭代器,用于将集合迭代输出
merge:用于将多个集合拼接成一个新集合
sort:用于对集合进行排序
subset:截取集合部分元素,形成新的子集合
数据标签:
aciton:用于在jsp页面直接调用一个Action,通过指定executeResult参数,可以将Action处理结果包含到本页面中
bean:用于创建JavaBean实例,如果指定了var属性,可以将创建的JavaBean实例放入Stack Context中
date:用于格式化输出一个日期
debug:用于在页面生成一个调试链接,单击该链接,可以看到当前ValueStack和Stack Context中的内容
i18n:指定国际化资源文件的baseName
include:用于在jsp页面中包含其他的jsp或Servlet资源
param:用于设置一个参数,通常用于bean标签、url标签的子标签
push:将某个值放入ValueStack的栈顶
set:设置新变量
text:输出国际化消息
url:生成一个URL地址
property:用于输出某个值,包括输出ValueStack、Stack Context和Action Context中的值
主题和模板:
所有的Struts2标签都是基于主题和模板的,对于一个jsp页面包含的UI标签,既可以直接设置该UI标签需要使用的模板,也可以设置该UI标签使用的主题,建议界面开发选择特定主题,而不是强制使用特定模板表现UI标签。主题是模板的组织形式,模板被包装在主题里面,设置主题方法有如下几种:
1.通过特定UI标签上的theme属性指定主题
2.通过设定特定UI标签外围的<s:form…/>标签的theme属性来指定主题
3.通过page会话范围内的theme属性来确定主题
4.通过request会话范围内的theme属性来确定主题
5.通过session会话范围内的theme属性来确定主题
6.通过application会话范围内的theme属性来确定主题
7.通过设置名为Struts.ui.theme常量确定,该常量可以通过struts.properties文件或者struts.xml文件确定
优先级从1-7是从大到小,比如如果设置了page和struts.xml,则主题是page设置的主题
关于模板的加载:
struts2的模板目录是通过struts.ui.templateDir常量指定,默认值为template,即会从Web应用的template目录、CLAASSPATH(包括WEB-INF/classes和WEB-INF/lib路径)的template目录一次加载特定模板文件,如果要选择自己的模板技术,可通过修改struts.ui.templateSuffix常量的值为:
1.ftl:基于FreeMarker的模板技术
2.vm:基于Velocity的模板技术
3.jsp:基于JSP的模板技术
表单标签:
所有的表单标签处理类都继承了UIBean,UIBean包含了一些通用属性,这些通用属性分配三类:模板相关属性,JavaScript相关,通用属性,特殊属性form
非表单标签:
作用:在页面中显示Action里封装的信息
具体:
1.actionerror:如果Action实例的getActionErrors()方法返回不为null,则该标签负责输出该方法的系列错误
2.actionmessage:如果Action实例的getActionMessages()方法返回不为null,则该标签负责输出该方法返回的系列消息
3.component:使用此标签可以生成一个自定义组件
4.fielderror:如果Action实例存在表单域的类型转换错误、校验错误。该标签负责输出这些错误提示