使用过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的更多相关文章

  1. Struts2-学习笔记系列(6)-动态调用action

    动态调用之前需要配置: <!--动态方法调用--> <constant name="struts.enable.DynamicMethodInvocation" ...

  2. Struts2 使用通配符动态请求Action

    在以前的学习中,<action>元素的配置,都是用明确的配置,其name.class等属性都是一个明确的值.其实Struts2还支持class属性和method属性使用来自name属性的通 ...

  3. Struts2基础-4-2 -struts拦截器实现权限控制案例+ 模型驱动处理请求参数 + Action方法动态调用

    1.新建项目,添加jar包到WEB-INF目录下的lib文件夹,并添加到builde path里面 整体目录结构如下 2.新建web.xml,添加struts2核心过滤器,和默认首页 <?xml ...

  4. 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 ...

  5. Action的动态调用方法

    Action执行的时候并不一定要执行execute方法,我们可以指定Action执行哪个方法: 1. 方法一(通过methed属性指定执行方法): 可以在配置文件中配置Action的时候用method ...

  6. Struts2 动态调用方法

    struts2动态调用方法有两种方式 方式一:用通配符进行调用: Action方法: package com.bjyinfu.struts.actions; public class CatchDyn ...

  7. struts2 type="redirectAction"重定向 与动态调用方法

    <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-/ ...

  8. 【SSH】——Struts2中的动态方法调用(二)

    当action中的方法有很多时,那应该怎么调用呢?上次我们提到的UserAction类中只有一个execute方法,如果我们需要增加用户的增删改查方法,如下: public class UserAct ...

  9. Struts2学习四----------动态方法调用

    © 版权声明:本文为博主原创文章,转载请注明出处 Struts2动态方法调用 - 默认:默认执行方法中的execute方法,若指定类中没有该方法,默认返回success <package nam ...

随机推荐

  1. .Net微服务实践(四)[网关]:Ocelot限流熔断、缓存以及负载均衡

    目录 限流 熔断 缓存 Header转化 HTTP方法转换 负载均衡 注入/重写中间件 后台管理 最后 在上篇.Net微服务实践(三)[网关]:Ocelot配置路由和请求聚合中我们介绍了Ocelot的 ...

  2. css进阶选择器

    后代选择器 用空格隔开 选择div标签下的p标签下的a标签 div p a 选择class为parent标签下的p标签下的a标签 .parent p a 后代选择器可以是标签.类.id的混合体 后代选 ...

  3. css | js 实现扩展卡片小demo

    1.代码如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  4. docker-compose错误

    1.错误信息: ERROR: for gamehall Get https://hub.tondeen.com/v1/_ping: http: server gave HTTP response to ...

  5. Linux 压缩备分篇(一 备份数据)

    备份文件                dump dump: -S                    仅列出待备份数据需要多少磁盘空间才能够备份完毕 -u                    将 ...

  6. 抓包——HTTP分析

      1.什么是HTTP请求(底层使用scoket TCP技术) HTTP是超文本传输协议.底层使用的scoket tcp长连接.基于请求和响应  同步请求. 2.重定向底层: 重定向原理:为什么会产生 ...

  7. C语言实现链栈以及基本操作

    链栈,即用链表实现栈存储结构.链栈的实现思路同顺序栈类似,顺序栈是将数顺序表(数组)的一端作为栈底,另一端为栈顶:链栈也如此,通常我们将链表的头部作为栈顶,尾部作为栈底,如下下图所示: 将链表头部作为 ...

  8. xxx 表 is marked as crashed and last (automatic?) repair 解决办法

    如上图出现 xxx 表 is marked xxxx   的问题 运维那说是因为数据库非正常停掉 时 刚好有数据正在写入 数据库 导致的问题,这个没多大影响,需要 执行命令修复数据库,至于命令是什么? ...

  9. AJ学IOS(24)UI之注册案例

    AJ分享,必须精品 先看效果 制作思路 在做这个的时候,首先用stroyboard画出来界面UI,这个很简单,不多说了,然后下一步就是自定义xib做键盘上面的那一栏了,需要自己做xib还有view,详 ...

  10. 这本最适合夯实基础的经典 Java 书籍,可能80% 的 Java 程序员没有认真看过!

    公众号[程序员书单]出品,转载请注明出处 作者:黄小斜 今天要给大家带来的一本书,是大名鼎鼎的head first系列丛书的一本<head first Java>相信很多学习Java的朋友 ...