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

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

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

struts.xml 文件中,常用

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

<resutl/> 也支持通配符

<?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_*

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文件 一例子:

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

-----------------------------------------------------------------------

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

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

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

你可能感兴趣的:(action)