@yudesong
2018-02-17T08:17:34.000000Z
字数 2076
阅读 665
Struts2
1.Action从页面取值
a)基本属性注入(页面,Action)

b)域模型注入(页面,Action)

2.页面从Action取值
a)使用EL表达式

b)OGNL
Object Graph Navigation Language,是一门功能强大的表达式语言,类似于EL。Strut2默认采用OGNL表达式访问Action的数据,实际上是通过ValueStack对象来访问Action。在Struts2中,OGNL表达式要结合Struts2标签来访问数据
EL:${user.userName} <==> OGNL:<s:property value="user.userName">a)访问基本属性 <s:property value="属性名"/>b)访问实体对象 <s:property value="对象名.属性名"/>c)访问数组/集合 <s:property value="someArray[1]"/> | <s:property value="someList[1]"/>d)访问Map <s:property value="someMap.key" />e)运算 <s:property value="'My name is' + name" />f)调用方法 <s:property value="name.toUpperCase()" />g)创建集合 <s:property value="{'a','b','c'}" /> ArrayListh)创建Map <s:property value="#{'mm':'MM','nn':'NN'}" />
是Struts2中,Action向页面传递数据的媒介,封装了Action的数据,并允许JSP通过OGNL来对其访问

a)通过<s:debug>观察其结构b)输出栈顶:<s:property />c)访问Context对象:- OGNL表达式以"#"开头- 以key来访问context对象的值,即"#key"得到context中某属性值d)迭代集合e)按数字迭代

2.ValueStack栈顶的变化
3.EL表达式访问ValueStack
6大核心组件

用途: 拦截器适合封装一些通用处理,便于重复利用。例如请求参数传递给Action属性,日志的记录,权限检查,事务处理等。拦截器是通过配置方式调用,因此使用方法比较灵活,便于维护和扩展。
使用步骤:
1. 创建拦截器组件(创建一个类,实现Interceptor接口,并实现intercept方法;也可以继承MethodFilterInterceptor,这种方式可以使action中某个方法不进行拦截)
public String intercept(ActionInvocation invocation){//拦截器--前部分处理invocation.invoke();//拦截器--后续处理}
<package><interceptors><interceptor name="别名" class="实现类"/><!--其他拦截器--></interceptors></package>
<action><!--手动的使用一次系统默认的拦截器--><interceptor-ref name="defaultStack"/><interceptor-ref name="拦截器别名"/><!--可以写多个--><!--可以使用excludeMethods参数属性,设置不过滤的方法--></action>
<interceptor-stack name="myStack"><interceptor-ref name="拦截器别名1"/><interceptor-ref name="拦截器别名2"/></interceptor-stack>
