42.Struts2第四天 拦截器和标签
1. 复习昨日练习程序:
|
1)先是补充<s:iterator value=”#list”></s:iterator>标签,每次拿一个对象便把它压入栈顶。然后即可使用<s:property value=”属性”/>意思从栈顶拿出属性。;蓝色部分是写OGNL表达式. 2)第二种是放入ActionContext中,<s:iterator value=”#list” var=”l”></s:iterator>这是每遍历一个对象便把它放入到ActionContext中。Var对应的是键。 |
2. 登录成功返回一个UIser对象存在session域中作为标识。
3. New RuntimeException(“xxx”);异常对象也是一个javaBean对象。
4. 用户登录案例的学习为拦截器做准备:
|
学习: 此无事务 服务器收到参数之后调用service的login()方法登录,如果查询不到对象则new RuntimeException(“错误”),在Strtus2的配置文件中配置元素:(要知道异常对象new出来时被放在了栈顶) <global-exception-mappings > <exception-mapping result="error_login" exception="java.lang.RuntimeException"></exception-mapping> </global-exception-mappings> ongl从栈顶的异常对象取得错误信息: <s:property value=”exception.message”> 以上注意一点:result标签匹配错误的exception时,应转发到页面,onjl才能获得错误信息。 |
5. <s:degbug></s:degbug>里面可以看到valueSatck的栈和context。
6. 拦截器 interceptor
|
1)拦截器的放行是调invocation的invoke()方法。 doIntercept方法内需要的结构: //前处理
//放行 Invocation.invoke(); //后处理 Return String;???? 拦截器原理:不放行的话直接返回走result显示页面,放行的话走下一个拦截器。根据业务写代码在放行前或者后处理。 2)创建拦截器有三种方式,暂时只记第三种可订制方法拦截器: 继承MethodFilterInterceptor。 |
7. 拦截器配置
|
在struts-defauit核心配置文件内有相关配置: 注册: 拦截器栈,可以看作一个集合 配置步骤: <interceptors></interceptors>标签内部包含了第一步和第二步操作。 1)注册拦截器 <interceptor name="wly" class="com.opensymphony.xwork2.interceptor.AliasInterceptor"/> 2)注册拦截器栈 <interceptor-stack name=”mystack”> 引入自己的拦截器 讲究写在引入默认的之前! <interceptor-ref name=”wly”><interceptor-ref> 使用标签引入默认的拦截器栈(20个)(name复制) <interceptor-ref name=”defaultStack”><interceptor-ref> <interceptor-stack> 3)指定默认拦截器栈 为整个包内Action都走这些拦截器: <default-interceptor-ref name=”mystack”></default-interceptor-ref> 指定单个action走引用的加自定义的拦截器,其他action走默认引用的20个。 <action> <interceptor-ref name=””></interceptor-ref> </action> |
8. 拦截器拦截方法指定
|
指定哪些方法不拦截:exclude排除,不包括 。Include和exclude不能同时指定。 拦截器其实在调用以下两种方法: 例:登录时除了登录方法不拦截外,其他方法均拦截,当用户未登录时,所以拦截后若走return “”,应配置全局结果集匹配显示: 此需要在指定默认拦截器之后,运行时异常匹配之前。 上述解决未登录方法2: 在jsp页面嵌入javaScript代码: <script> Window.onload=function(){ If(window.parent!=window){ Window.parent.location.href=”${pageContext.request.ContextPath}”; } }; </script> |
9. struts2标签 暂时了解
|
<s:iterator>标签 从session中取得用户名:<s:property value=”#session.user.name”> Struts2表单标签: 可以给其指定一个theme属性:simple,不添加任何多余修饰
非表单标签:可以在action中this.addActionError(“错误信息”); 在后台页面取出错误信息<s:actionerror/>:取出错误信息 |
快捷键ctrl+o是: