动态调用Action与Action中方法(一)

来源:岁月联盟 编辑:zhuzhu 时间:2009-03-20

  Struts1 提供了DispatchAction 实现一个Action中名含多个业务逻辑

  现在我们使用Struts2 也可实现现样的效果, 是使用通配符来实现的.

  struts.xml 文件中,常用

      <action /> 的name , class, method 三个属性都支持通配符

      <resutl/> 也支持通配符

  Xml代码   

 

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"    "http://struts.apache.org/dtds/struts-2.0.dtd"><struts>		<package name="struts2" extends="struts-default">		<action name="*Action_*" class="ssh.org.web.{1}Action" method="{2}">			<result name="success">/user/success.jsp</result>			<result name="input">/user/user.jsp</result>			</action>	</package></struts>

 

  针对上面的配置, 假如我拉的URL 是:http://localhost/struts/UserAction_addUser .action

  UserAction_addUser 与*Action_* 匹配  , 第一个* 是User, 第二个*是addUser,

  {1} 的值为 User,  {2}的值为addUser , 区分大小写.

  class="ssh.org.web.{1}Action"  赋值后是,由User 替代{1}

  method="{2}" 赋值后是, 由addUser 替代{2}

  从而实现动态的找到Action 与找个Action中的方法.

  其中一个Action代码: 类名是UaerAction,   其中有addUser()方法

  与URL http://localhost/struts/UserAction_addUser .action  相匹配, 模式为*Action_*

  Java代码  

 

package ssh.org.web;import java.util.Date;import java.util.List;import com.opensymphony.xwork2.ActionSupport;public class UserAction extends ActionSupport{	private static final long	serialVersionUID	= 1L;	private String				username;	private int					age;	private Date				birthday;	private List<String>		aihao;	public String addUser() throws Exception	{		//添加用户		return "success";	}	public void validateAddUser()	{		if (null == username || "".equals(username))		{			addFieldError("username", "用户名不能为空");		}		System.out.println("validateAddUser() 验证方法 ");	}	public String getUserList()	{		//取得所有用户		return "success";	}	public void validateGetUserList()	{		//验证方法略...		System.out.println("validateAddUser() 验证方法 ");	}	public String getUsername()	{		return username;	}	public void setUsername(final String username)	{		this.username = username;	}	public int getAge()	{		return age;	}	public void setAge(final int age)	{		this.age = age;	}	public Date getBirthday()	{		return birthday;	}	public void setBirthday(final Date birthday)	{		this.birthday = birthday;	}	public List<String> getAihao()	{		return aihao;	}	public void setAihao(final List<String> aihao)	{		this.aihao = aihao;	}}

 

  <resutl/> 也支持通配符,

  struts.xml文件 一例子:

  Xml代码  

 

		<action name="page_*" class="ssh.org.web.HrefAction" >			<result name="success">{1}.jsp</result>					</action>

 

  最后在说一说优先级的问题

  通配符 匹配方式 , 当我们写多个<action name="*"  .../>   时, 意思就是 你的URL 可能与多个  <action name="*"  .../>  匹配上,  先执行那一个?

  答: 按 书写的先后顺序, 先找到哪个, 就执行哪个.