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

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="*"  .../>匹配上,先执行那一个?

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

时间: 2024-09-28 04:29:38

动态调用Action与Action中方法(一)的相关文章

C#程序实现动态调用DLL的研究

原文:C#程序实现动态调用DLL的研究 C#程序实现动态调用DLL的研究 摘  要:在<csdn开发高手>2004年第03期中的<化功大法--将DLL嵌入EXE>一文,介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在可执行文件运行时,自动从资源中释放出来,通过静态加载延迟实现DLL函数的动态加载,程序退出后实现临时文件的自动删除,从而为解决"DLL Hell"提供了一种解决方案.这是一个很好的设计思想,而且该作者也用C++实现了,在Internet上也

关于c#动态调用非托管DLL的内存释放问题

问题描述 本人由于客户的需要,需要在程序的运行过程中,动态加载不同的DLL.这与直接调用非托管DLL不一样.下面这个帖子中的第三个方法很好的说明了如何动态调用非托管DLL.http://blog.csdn.net/pansiom/article/details/568096#comments为了方便使用,我把文中的方法弄成了一个DLDApi类,如下usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Re

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

其实有8动态调用Action与Action中方法(一)这第一种方法,这第二三种方法,就显示的不重要了,只能动态调用Action中方法 ,但这里也记一下 第二种方法 method="addUser",method="getUserList" Xml代码 <action name="addUser" class="ssh.org.web.UserAction" method="addUser"> &

action 没有跳转-Action中调用另一个类中的方法时没有跳转,但是新建的其他测试类就可以跳转,WHY?

问题描述 Action中调用另一个类中的方法时没有跳转,但是新建的其他测试类就可以跳转,WHY? action中调用EmailUtil中的sendHtmlMail方法: public void forgetPassword() throws Exception { String email = request.getParameter("email"); User u=userService.getByEmail(email); Json json=new Json(); if (St

java-SSH Action 动态调用 参数 404异常

问题描述 SSH Action 动态调用 参数 404异常 1. 异常情况: 1. There is no Action mapped for namespace [/dd] and action name [laladList] associated with context path [/baee]. - [unknown location] 1. at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy

Struts2中Action的通配符使用方法

在这篇<Struts2学习之配置单个Action多控制处理逻辑>文章中,讲到指定method属性时,列举了以下的配置代码:  代码如下 复制代码 <struts>     <constant name="struts.enable.DynamicMethodInvocation" value="true" />     <package name="lee" extends="struts-de

struts2中访问指定了方法,但是却把action下所有的方法都执行了一次这是怎么回事啊

问题描述 struts2中访问指定了方法,但是却把action下所有的方法都执行了一次这是怎么回事啊 具体配置如下图 xml配置如下: jsp如下: action如下: 解决方案 你的BaseAction是自定义的吧,还是哪个别的第三方包的,常用的是继承struct自带的MappingDispatchAction,这个是和struct.xml搭配来用,你也可以继承MappingDispatchAction这个类,然后再写你的action模式 解决方案二: 那应该就是你调用的函数getByPage

求解在SSH中,打开页面时引用action,并读取在调用action后session中数据

问题描述 求解在SSH中,打开页面时引用action,并读取在调用action后session中数据 解决方案 解决方案二:Mapmap=(Map)ActionContext.getContext().get(ActionContext.SESSION);Objectobj=map.get("sessionKey");解决方案三:引用楼主a76607401的回复: 求解在SSH中,打开页面时引用action,并读取在调用action后session中数据 我就是想知道咋个在页面中引用s

jQuery中设置form表单中action值的实现方法_jquery

html代码: <form id="myFormId" name="myForm" action="" method="post"> <input type="hidden" id="inParam" name="inParam" /> <input type="hidden" id="tstype"

php中动态调用函数的方法

 这篇文章主要介绍了php中动态调用函数的方法,实例分析了php动态函数的实现原理与具体实现步骤,需要的朋友可以参考下     本文实例讲述了php中动态调用函数的方法.分享给大家供大家参考.具体分析如下: php中你可以动态调用函数,分为以下步骤: 1. 定义一个函数 2. 将函数名(字符串)赋值给一个变量 3. 使用变量名代替函数名动态调用函数 详细代码如下所示: ? 1 2 3 4 5 6 7 <?php function addition ($a, $b){ echo ($a + $b)