Struts2的动态Action实现

源自:Struts2的动态Action实现

在Struts2中动态方法调用有三种方式。

一、指定method属性
在struts.xml中指定action的method属性。

<package name=”demo1” extends=”struts-default”>
              <action name=”Login” class=”com.demo.LoginAction” />
                     <result name=”input”>/input.jsp</result>
                     <result name=”error”>/error.jsp</result>
                     <result name=”success”>/success.jsp</result>
              </action>
              <action name=”Registry” class=”com.demo.LoginAction” method=”registry” />
                     <result name=”input”>/input.jsp</result>
                     <result name=”error”>/error.jsp</result>
                     <result name=”success”>/success.jsp</result>
              </action>
       </package>

处理逻辑通过method方法指定,其中名为Login的Action对应的处理逻辑为默认的execute方法,而名为Registry的Action对应的处理逻辑则为method指定的registry方法。

二、感叹号方式(需要开启),官网不推荐使用这种方式,建议大家不要使用。

三、通配符方式(官网推荐使用)

在配置<action>元素时,需要指定name、class、method等属性,这3个属性都支持通配符,在使用通配符定义Action的name属性时,相当于一个元素action定义多个逻辑Action。

第一种方法中的action配置可以更改为:

<package name=”demo” extends=”struts-default”>
       <action name=”*Action” class=”com.demo.LoginAction” method=”{1}”>
              <result name=”input”>/input.jsp</result>
              <result name=”error”>/error.jsp</result>
              <result name=”success”>/success.jsp</result>
       </action>
</package>

上述定义不是定义了一个普通的action,而是定义一系列的action,只要用户请求的URL满足*Action的模式,都可通过该Action进行处理,而method属性使用了一个表达式{1},该表达式的值就是name属性中第一个*的所代表的值,例如,用户请求的URL为LoginAction,则*所代表的是Login字符串,故调用com.demo.LoginAction类的Login方法来处理。如果请示的URL为RegistryAction的话,则调用com.demo.LoginAction的Registry方法进行处理。

以下配置在class属性中使用通配符:

<package name=”demo” extends=”struts-default”>
       <action name=”*Action” class=”com.demo.{1}Action”>
              <result name=”input”>/input.jsp</result>
              <result name=”error”>/error.jsp</result>
              <result name=”success”>/success.jsp</result>
       </action>
</package>

此配置中没有指定method属性,所以请示由默认的execute方式来执行,但class中使用了通配符,它的含义与上面一样,例如,当用户请求的为LoginAction时,其中*的值为Login,该值传入class属性,即该Action的处理类为com.demo.LoginAction;而如果请求为RegistryAction时,则该Action的处理类将变为com.demo.RegistryAction。

Struts2允许在class属性和method属性中同时使用表达式,示例如下:

<action name=”*_*” class=”com.demo.{1} method=”{2}” />

只要满足*_*模式的Action都会被其处理,例如有Order_Booking请求到来,由于第一个*的值为Order,第二个*的值为Booking,那么意味着将会调用com.demo.Order处理类中的Booking方法来处理用户请求。

Struts2在<result>元素中也可以使用表达式,如下:

<action name=”*Action” class=”com.demo.{1}Action method=”{1}” >
              <result name=”success”>/{1}.jsp</result>
       </action>

当请求为LoginAction时,将调用com.demo.LoginAction处理类中的Login方法处理用户的请求,当返回为success时,显示/Login.jsp页面。

注意:在使用通配符后,除非请求的URL与Action的name属性绝对相同,否则将按Action在struts.xml中定义的先后顺序来决定由哪个Action来处理用户请求。

原文地址:https://www.cnblogs.com/xym4869/p/8963797.html

时间: 2024-10-16 08:09:38

Struts2的动态Action实现的相关文章

Struts2的动态Action和默认后缀.action

1:Struts2的默认访问后缀是.action(特别需要注意的是改了配置文件web.xml或者struts.xml需要重启服务器) 2:Struts2中常用的常量介绍:<!-- 一:全局配置 --> <!--1.请求数据编码  --><constant name="struts.i18n.encoding" value="UTF-8"/><!--2.修改struts2默认的自定义后缀 --><constant

Struts2.3动态调用报 No result defined for action 错误

struts 2.3.16  採用动态调用发现不工作报404 not found,网上查找原因: 1.由于:struts2中默认不同意使用DMI 所以:须要在配置文件里打开: <constant name="struts.enable.DynamicMethodInvocation" value="true"/> 改动发现报No result defined for action 2.错误信息来看,是说未定义result. 你有没有配置拦截器<in

struts2 动态Action

1.java 2.struts.xml struts2.5,默认关闭动态Action,着色的是开启和使用动态action 3.JSP 小结:访问时,用!后跟方法名的方法,方法返回值----->result name,之后跳转响应视图.

Struts2的动态方法,及result跳转方式,全局结果以及默认的action的配置

Action动态方法的调用 首先我们需要在struts.xml中去配置一个常量值如下 那么去哪找呢?找到Struts-core.jar并打开 method属性 <action name="login" class="cn.ssh.ch08.UserAction" method="lgoin"> <result name="success">/success.jsp</result> <

Struts2笔记——2.Action的实现、配置

实现Action Struts2中,action负责对用户请求的处理,因此它是整个应用的控制器,也是整个应用的核心.而对开发者来说,他们需要提供大量的action类.相对于struts1而言,struts2的浸入性更低,因为它的action无需继承任何父类或者接口,仅仅是一个普通的POJO(但是应该包括一个无参数的execute方法).struts2通常直接使用action来封装http请求参数(可以理解为表单中的参数,如username,password等),因此在对应的action类中,应该

struts2的动态方法调用(DMI)和通配符映射

动态方法调用 1.Struts2默认关闭DMI功能,需要使用需要手动打开,配置常量 [html] view plain copy struts.enable.DynamicMethodInvocation = true 2.使用“!”方法,即action名称!方法名称. struts.xml [html] view plain copy <action name="query" class="action.QueryAction"> <result

struts2设置index.action为主页(另:web.xml编辑卡死问题解决)

本来是弄拦截器的问题,结果弄主页的时候,还是发现了问题. 公司网站的项目里面,是用index.action作为主页的,访问WEB-INF里面的html文件.可是我设置的却不成功,追根到底,一个原因,struts2比较特殊,struts.xml里面必须多配置一个request和response. <?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_9" versio

struts2.0中Action的对象生命周期详解!!(转)

原文出处:http://blog.csdn.net/wxy_g/article/details/2071662 有很多人问Struts2.0中的对象既然都是线程安全的,都不是单例模式,那么它究竟何时创建,何时销毁呢? 这个和struts2.0中的配置有关,我们来看struts.properties ### if specified, the default object factory can be overridden here ### Note: short-hand notation is

struts2中的action标签

struts2中的action标签用于在JSP页面中直接调用一个Action,通过指定executeResult参数,还可以将该Action的处理结果包含到本页面中来. 使用action标签可以允许JSP页面直接调用Action,因为需要调用Action,故可以指定需要被调用的Action的name以及namespace.如果指定了executeResult参数的值为true,该标签还会把Action中处理的结果包含到本页面中来.使用action标签有如下的几个属性: id: