Struts2 动态调用方法

struts2动态调用方法有两种方式

方式一:用通配符进行调用:

Action方法:

 1 package com.bjyinfu.struts.actions;
 2
 3 public class CatchDynamicMethod {
 4
 5     public String doFirst(){
 6         System.out.println("执行doFirst方法");
 7         return "success";
 8     }
 9
10     public String doSecond(){
11         System.out.println("执行doSecond方法");
12         return "success";
13     }
14 }

Struts2中注册方法:(注:method对应得是占位符从1开始,在提交请求的时候,*是什么,method对应的就是什么,也就是说提交请求的时候,*对应的应该是对应的方法名称)

1 <struts>
2
3   <package name="dynamic" namespace="/dynamic" extends="default">
4         <action name="execute_*" class="com.bjyinfu.struts.actions.CatchDynamicMethod" method="{1}">
5             <result name="success">/welcome01.jsp</result>
6         </action>
7     </package>
8
9 </struts>

展示页面:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>My First Struts2 Project</title>
 8 </head>
 9 <body>
10     welcome01 page
11 </body>
12 </html>

(方法一就是讲通配符*换成方法名即可)

方法二:开启常量设置实现动态调用方法:

再Struts2.xml配置文件中注册方法的时候,将常量"struts.enable.DynamicMethodInvocation"开启

1 <struts>
2   <constant name="struts.enable.DynamicMethodInvocation" value="true"/>
3     <package name="dynamic" namespace="/dynamic" extends="default">
4         <action name="execute" class="com.bjyinfu.struts.actions.CatchDynamicMethod">
5             <result name="success">/welcome01.jsp</result>
6         </action>
7     </package>
8 </struts>

地址栏访问的时候,http://127.0.0.1:8080/projectName/dynamic/execute!方法名.action

时间: 2024-10-04 00:04:23

Struts2 动态调用方法的相关文章

struts2 动态调用方法和使用通配符定义

struts2中无需配置就可以直接调用Action中非execute方法的方式,就是用struts2的动态方法调用.动态方法调用是在action 的名字中使用感叹号(!)来标示要调用的方法名,其语法格式为actionName!methodname.action,例如我们的 struts.xml的配置如下: <struts> <package name="struts" namespace="/user" extends="struts-d

.Net——动态调用方法

一,使用InvokeMember 思路:在类型的type的对象上调用InvokeMember方法,传递要在其上调用方法的对象,并指定BindingFlags为InvokeMethod.根据方法签名,可能还需要传递参数. 示例(对普通方法和对静态方法的调用): #region 动态调用方法--使用InvokeMember对一般方法的调用 //Type t = typeof(Calculator); //Calculator c = new Calculator(1, 2); //int resul

自学ios开发-------Objective-c动态调用方法笔记

OC动态调用OC的函数调用是消息发送模式,即在运行时动态调用函数,OC在编译期可以调用任何函数,只要声明过这个函数,就不会报错,在真正运行的时候才会根据函数的名称找到对应的函数来调用[ASPerson SayHello] 编译时RunTime会将上述代码转化为objc_msgSend(ASPerson @selector(SayHello)) 所有定义的类型都继承自NSObject,NSObject中存在一个指向Class的指针 Class是指向objc_class结构的函数指针; struct

使用反射构造对象实例并动态调用方法

在.Net 中,程序集(Assembly)中保存了元数据(MetaData)信息,因此就可以通过分析元数据来获取程序集中的内容,比如类,方法,属性等,这大大方便了在运行时去动态创建实例. MSDN解释如下: 反射提供了封装程序集.模块和类型的对象(Type 类型).可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性.如果代码中使用了属性,可以利用反射对它们进行访问. 主要用途: 动态加载DLL,实现插件机制. 实例化DLL中的类型. 执行后期

php中怎么使用call_user_func动态调用方法

php中可使用call_user_func进行方法的动态调用,可以动态调用普通函数.类方法以及带参数的类方法1.定义一个普通函数getCurrentDate,用于获取今天日期.call_user_func带上的参数为要被调用的函数名fucntion getCurrentDate(){echo 'getCurrentDate:' . date('Y-m-d');}call_user_func('getCurrentDate'); 程序会自动执行getCurrentDate函数并获得期望的结果get

通过反射调用动态调用方法

调用无返回值.无参数的方法 假如有一个BaseEntity类,我们要使用反射调用BaseEntity类中的A方法:首先我们必须要先声明一个Type类的实例: Type baseType=typeof(BaseEntity); 再来我们要再声明一个MethodInfo类的实例,用来寻找BaseEntity类中的方法:现在我们要调用BaseEntity类中的A方法,所以我们代码可以这样写 MethodInfo MeInfo=baseType.GetMethod("A"); 然后我们就可以使

Struts2中Action的动态调用方法

在Struts2中,Action执行的时候并不一定要执行execute,我们可以指定Action执行哪个方法,下面分别介绍三种方法来指定Action执行哪个方法: 1.第一种方法,通过Action里的method属性指定执行方法,我们可以在struts.xml配置文件中配置Action的时候用method="   " 来指定执行的哪个方法. (1).接下来附上一个例子,通过第一种方法来指定执行方法,首先,复制一个已经搭建好struts2环境的web项目,这里我们复制ActionTest

Action的动态调用方法

Action执行的时候并不一定要执行execute方法,我们可以指定Action执行哪个方法: 1. 方法一(通过methed属性指定执行方法): 可以在配置文件中配置Action的时候用method=来指定执行哪个方法 <action name="userAdd" class="com.bjsxt.struts2.user.action.UserAction" method="add"> <result>/user_ad

Java反射:根据方法名动态调用方法,解决商品动态属性取值问题。

public class Goods{ private String goodsName; private String attr1; private String attr2; private String attr3; private String attr4; ......... private String attr20; setter/getter方法 } 在数据库表goods中,已知该商品的属性个数N(满足:N=5,attr1—attr5有值,attr6-attr20为空).问如何取