3.2. 为Action配置method属性: 将Action类中的每一个处理方法都定义成一个逻辑Action方法。 /success.jsp /error.jsp /success.jsp /error.jsp 如上,把LoginAction中的login和regist方法都配置成逻辑Action。要调用login方法,则相应的把index.jsp中表单元素的action设置为\;要调用regist方法,把regist.jsp中表单元素的action设置为\。 3.3. 使用通配符映射(wildcard mappings)方式: 在struts.xml文件中配置元素时,它的name、class、method属性都可支持通配符,这种通配符的方式是另一种形式的动态方法调用。 当我们使用通配符定义Action的name属性时,相当于用一个元素action定义了多个逻辑Action: /success.jsp /error.jsp 如上,定义一系列请求URL是user_*.action模式的逻辑Action。同时method属性值为一个表达式{1},表示它的值是name属性值中第一个*的值。例如:用户请求URL为user_login.action时,将调用到UserAction类的login方法;用户请求URL为user_regist.action时,将调用到UserAction类的regist方法。 4.处理结果 Struts2的Action处理完用户请求后,将返回一个普通字符串,整个普通字符串就是一个逻辑视图名。Struts2通过配置逻辑视图名和物理视图资源之间的映射关系,一旦系统收到Action返回的某个逻辑视图名,系统就会把对应的物理视图资源呈现给浏览者。 4.1. 配置处理结果: Struts2的Action处理用户请求结束后,返回一个普通字符串-逻辑视图名,必须在struts.xml文件中完成逻辑视图和物理视图资源的映射,才可让系统转到实际的视图资源。 Struts2通过在struts.xml文件中使用元素来配置结果。Struts2提供了两种结果。 l 局部结果:将作为元素的子元素配置。 l 全局结果:将作为元素的子元素配置。 在package元素中配置子元素: 4.2. 处理结果类型: Struts2提供了对不同种类返回结果的支持,常见的有JSP,FreeMarker,Velocity等。 Struts2支持的不同类型的返回结果为: 名字 chain dispatcher freeMarker 说明 用来处理Action链 用来转向页面,通常处理JSP,这是默认的结果类型 处理FreeMarker模板 httpHeader redirect redirect-action stream velocity xslt plaintext tiles 用来控制特殊的Http行为 重定向到一个URL 重定向到一个Action 向浏览器发送InputSream对象,通常用来处理文件下载 处理Velocity模板 处理XML/XLST模板 显示原始文件内容,例如文件源代码 结合Tile使用 另外第三方的Result类型还包括JasperReports Plugin,专门用来处理JasperReport类型的报表输出;Jfreechart Plugin;JSF Plugin。 4.3. 动态返回结果 有些时候,只有当Action执行完毕的时候我们才知道要返回哪个结果,这个时候我们可以在Action内部定义一个属性,这个属性用来存储Action执行完毕之后的result值,例如: private String nextAction; public String getNextAction() { return nextAction; } 在strutx.xml配置文件中,我们可以使用来引用到Action中的属性,通过表示的内容来动态的返回结果,例如: 上述Action的execute方法返回next的时候,还需要根据nextAction的属性来判断具体定位到哪个Action。 5.属性驱动和模型驱动 不管属性驱动还是模型驱动,Struts2框架都是通过拦截器负责提取请求参数,并将请求数据封装到相应的Action实例的属性或专门的模型的属性。 5.1. 属性驱动: 属性驱动就是属性(property)作为贯穿MVC流程的信息携带者。简单的说,就是使用Action实例来封装请求参数和处理结果信息。前面我们做的示例都属于属性驱动模式。 5.2. 模型驱动: 模型驱动就是使用单独的javaBean作为贯穿整个MVC流程的信息携带者。也就是说,使用单独的VO(值对象)来封装请求参数和处理结果信息。 示例:继续修改用户登录验证: 1. 新增一用户域模型对象:User.java package org.qiujy.domain; publicclass User { private String userName; private String password; /** *@returntheuserName */ public String getUserName() { returnuserName; } /** *@paramuserNametheuserNametoset */ publicvoid setUserName(String userName) { this.userName = userName; } /** *@returnthepassword */ public String getPassword() { returnpassword; } /** *@parampasswordthepasswordtoset */ publicvoid setPassword(String password) { this.password = password; } } 2. 业务控制器:UserAction.java package org.qiujy.web.struts2.action; import org.qiujy.domain.User; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; publicclass UserAction extends ActionSupport{ //定义用于封装请求参数的模型对象 private User user = new User(); private String msg; //结果信息属性 /**