Struts2深入之动态调用Action
使用过Struts2的小伙伴们应该知道当我们的action的方法过多是如果需要通过Struts2框架进行运行,我们就必须在Struts2的配置文件Struts2.xml文件中配置多个action属性标签,但是当action个数在10以上时这种方法就显得不那么方便了,在此我们使用三种方法通过Struts2框架来动态地调用action
【1】通过配置action属性
【2】通过感叹号的方式来调用
【3】通过通配符的方式
接下来我们就一一为大家讲解以上三种方法的使用:
【1】通过配置action属性
首先在我们action中有两个方法---add和update,核心代码如下:
public String add()
{
return SUCCESS;
}
public String update()
{
return SUCCESS;
}
接下来我们就需要在Struts.xml文件中进行相关配置,配置中action的name属性不能出现同名,在其后的action的method属性,指出调用action的哪个方法
<struts>
<package name="default" namespace="/" extends="struts-default">
<action name="helloworld" class="helloworld所在包的路径">
<result>/result.jsp</result>
</action>
<action name="addAction"method="add" class="helloworld所在包的路径">
<result>/add.jsp</result>
</action>
<action name="updateAction"method="update" class="helloworld所在包的路径">
<result>/update.jsp</result>
</action>
</package>
</struts>
当我们在地址栏中输入http://localhost:8080/struts2...,即可调用HelloWorld这个action的add方法,结果如下图所示:
【2】通过感叹号的方式来调用
(Struts官方不推荐使用该方法,但在此仍在这里和大家分享一下)
使用该方法,首先应该在Struts.xml配置文件一句话:
<constant name="struts.enable.DynamicMethodInvocation" value="true"</constant>
使用这句话的目的是允许Struts动态地调用方法
之后的Struts.xml配置文件对action的配置如下:
<package name="default" namespace="/" extends="struts-default">
<action name="helloworld" class="helloworld所在包的路径">
<result>/result.jsp</result>
<result name="add">/add.jsp</result>
<result name="update">/update.jsp</result>
</action>
</package>
另外也需要在action相关的方法中的返回值进行修改,执行时success,而实现这个方法动态调用action时则需要将return 后的值应和action标签中result属性的name值一致,具体如下图:
public String add()
{
return "add";
}
public String update()
{
return "update";
}
在地址栏输入的地址也需做相应的改变,具体如下:
http://localhost:8080/struts2...,其结果如下图:
【3】通过通配符的方式(官方推荐的使用方式)
首先应该讲Struts.xml配置文件中的constant标签中的value属性改为false,另外Struts.xml文件中的其他部分应需做相应的修改,具体如下:
<package name="default" namespace="/" extends="struts-default">
<action name="helloworld_*" method="{1}"
class="cn.imooc.action.HelloWorldAction">
<result>/result.jsp</result>
<result name="add">/add.jsp</result>
<result name="update">/update.jsp</result>
</action>
</package>
action和方法二中的方法一样
在地址栏输入的地址有所不同,具体如下:
http://localhost:8080/struts2...结果和上图一样
这就是三种调用action的方法,希望对大家有所帮助。
Struts2深入之动态调用Action的更多相关文章
- Struts2-学习笔记系列(6)-动态调用action
动态调用之前需要配置: <!--动态方法调用--> <constant name="struts.enable.DynamicMethodInvocation" ...
- Struts2 使用通配符动态请求Action
在以前的学习中,<action>元素的配置,都是用明确的配置,其name.class等属性都是一个明确的值.其实Struts2还支持class属性和method属性使用来自name属性的通 ...
- Struts2基础-4-2 -struts拦截器实现权限控制案例+ 模型驱动处理请求参数 + Action方法动态调用
1.新建项目,添加jar包到WEB-INF目录下的lib文件夹,并添加到builde path里面 整体目录结构如下 2.新建web.xml,添加struts2核心过滤器,和默认首页 <?xml ...
- Struts2中DMI(动态方法调用)的错误问题(There is no Action mapped for namespace [/xxx] and action name [xxx!yyy] a)
默认的Struts.xml中是这样的 <constant name="struts.enable.DynamicMethodInvocation" value="f ...
- Action的动态调用方法
Action执行的时候并不一定要执行execute方法,我们可以指定Action执行哪个方法: 1. 方法一(通过methed属性指定执行方法): 可以在配置文件中配置Action的时候用method ...
- Struts2 动态调用方法
struts2动态调用方法有两种方式 方式一:用通配符进行调用: Action方法: package com.bjyinfu.struts.actions; public class CatchDyn ...
- struts2 type="redirectAction"重定向 与动态调用方法
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-/ ...
- 【SSH】——Struts2中的动态方法调用(二)
当action中的方法有很多时,那应该怎么调用呢?上次我们提到的UserAction类中只有一个execute方法,如果我们需要增加用户的增删改查方法,如下: public class UserAct ...
- Struts2学习四----------动态方法调用
© 版权声明:本文为博主原创文章,转载请注明出处 Struts2动态方法调用 - 默认:默认执行方法中的execute方法,若指定类中没有该方法,默认返回success <package nam ...
随机推荐
- ceph概述
ceph概述 基础知识 什么是分布式文件系统 • ...
- android之间的各项信息传输类型
首先是activity想fragment怎样动态的传输数据: 一:activity与fragment之间进行数据传递是,在Activity中将要传递的数据封装在一Bundle中,使用setArgume ...
- 【网络编程01】socket的基础知识-简单网络通信程序
1.什么是socket socket(套接字),简单来说是IP地址与端口(port)的组合,可以与远程主机的应用程序进行通信.通过IP地址可以确定一台主机,而通过端口则可以确定某一个应用程序.IP+端 ...
- buuctf misc wp 01
buuctf misc wp 01 1.金三胖 2.二维码 3.N种方法解决 4.大白 5.基础破解 6.你竟然赶我走 1.金三胖 root@kali:~/下载/CTF题目# unzip 77edf3 ...
- 查看jdk 线程 日志
命令:jstack(查看线程).jmap(查看内存)和jstat(性能分析)命令 这些命令 必须 在 linux jdk bin 路径 下执行 eq: ./jstack 10303 即可 如果想把 ...
- Codeup 25593 Problem G 例题5-7 求圆周率pi的近似值
题目描述 用如下公式 4*Π = 1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + 1/13 - 1/15 - 求圆周率PI的近似值,直到发现某一项的绝对值小于10-6为止(该项不 ...
- day28作业
import os import uuid import pickle from conf import settings class School: def __init__(self,name,a ...
- R - Cow and Message CodeForces - 1307C
思路对了,但是不会写. 等差数列长度不是1就是2,所以不是一个字母就是俩字母,一开始写的时候直接枚举两个字母,然后让次数相乘.这样是不对的,比如abaabb,字母ab的个数应该是3+2+2,因该是每一 ...
- A Bug's Life POJ 2492
D - A Bug's Life 二分图 并查集 BackgroundProfessor Hopper is researching the sexual behavior of a rare spe ...
- java第八周课后作业
1.系统小练习 package homework; import java.util.Random; import java.util.Scanner; public class Menu { pub ...