Struts2结果类型、拦截器、类型转换器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

结果类型

Action处理完用户请求后,将返回一个普通的字符串,整个普通字符串就是一个逻辑视图。Struts2通过配置一个逻辑视图和物理视图的映射关系,一旦系统返回某个逻辑视图系统就会把对应的物理视图呈现给用户。

Struts2 在struts.xml中使用来配置结果,根据元素的位置不同可以分为两类:

局部结果:将 作为子元素来配置。

全局结果:将作为元素的子元素配置。

配置 元素时通常需要指定两个属性:

name:该属性指定所需要的逻辑视图名

type:该属性指定结果类型:

常用的结果类型

结构类型含义

dispatcher默认,类似于JSP中forword服务器端的

分发

redirect直接跳转其他URL的结果类型,类似

与JSP的重定向

redirect-action直接跳转其他Action的结果类型

plainText用于展示某个页面原代码的结构类型

拦截器

Struts2中提供了很多特性都是通过拦截器实现的,例如异常处理,文件上传,生命周期回调和验证。拦截器从概念上来讲和Servlet过滤器

或JDK的Proxy类是一样的。提供了一种对Action进行预处理和事后处理的功能。

自定义拦截器

要自定义拦截器需要实现

com.opensymphony.xwork2.interceptor.Interceptor接口:

public class PermissionInterceptor implements Interceptor {

private static final long serialVersionUID = -5178310397732210602L;

public void destroy() {

}

public void init() {

}

public String intercept(ActionInvocation invocation) throws Exception {

System.out.println("进入拦截器");

if(session里存在用户){

String result = invocation.invoke();

}else{

return “logon”;

}

//System.out.println("返回值:"+ result);

//return result;

}

}

class="net.xabc.aop.PermissionInterceptor" />

class="net.xabc.action.HelloWorldAction" method="{1}">

/WEB-INF/page/hello.jsp

因为struts2中如文件上传,数据验证,封装请求参数到action等功能都是由系统默认的defaultStack中的拦截器实现的,所以我们定义的拦截器需要引用系统默认的defaultStack,这样应用才可以使用struts2框架提供的

众多功能。

如果希望包下的所有action都使用自定义的拦截器,可以通过把拦截器定义为默认拦截器。注意:每个包只能指定一个默认拦截器。另外,一旦我们为该包中的某个action显式指定了某个拦截器,则默认拦截器不会起作用

类型转换器

自定义类型转换器

下面的action中使用到了枚举类型Gender,当需要将请求参数注入

到gender属性时,我们必须定义转换器,否则struts2无法自动完成类型转换。

public class HelloWorldAction {

private Gender gender;

public Gender getGender() {

return gender;

}

public void setGender(Gender gender) {

this.gender = gender;

}

}

public enum Gender {

MAN,WOMEN

}

下面定义了一个针对Gender类型的类型转换器:

public class GenderConverter extends DefaultTypeConverter {

@Override

public Object convertValue(Map context, Object value, Class toType) { if(toType == Gender.class){//当字符串向Gender类型转换时

String[] params = (String[]) value;

return Gender.valueOf(params[0]);

相关文档
最新文档