《转》struts2动态方法配置 Action,使一个Action可处理多请求

Struts2中有时可能会需要使用一个Action来处理多个请求,来提高编码的效率和减少代码量。例如,在登录界面上的表单中可能会有登录和注册两个事件请求,有几种方式可以借鉴:

1.采用DMI动态调用方法。

  该方法的主要思想是在一个 Action 类中实现多个方法,然后每个 action 请求中表明要调用该类中的哪个方法。使用 actionname!method 方式调用。

  (1)LoginAction 类代码如下:

复制代码
View Code
 1 package com.main.action;
 2 
 3 import com.opensymphony.xwork2.ActionSupport;
 4 
 5 public class LoginAction extends ActionSupport {
 6     private String username;
 7     private String psd;
 8     
 9     public String login(){
10         if ("lihui".equals(username) && "xhh".equals(psd)) {
11             return SUCCESS;
12         } else {
13             return ERROR;
14         }
15     }
16     
17     public String regist(){
18         return "regist";
19     }
20     
21     public void setUsername(String username){
22         this.username = username;
23     }
24     
25     public String getUsername(){
26         return this.username;
27     }
28     
29     public void setPsd(String psd){
30         this.psd = psd;
31     }
32     
33     public String getPsd(){
34         return this.psd;
35     }
36 }
复制代码

  (2)struts.xml 配置如下:  

复制代码
复制代码
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE struts PUBLIC 
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
 4     "http://struts.apache.org/dtds/struts-2.0.dtd">
 5 
 6 <struts>
 7     <package name="default" namespace="/" extends="struts-default">
 8         <action name="login" class="com.main.action.LoginAction">
 9             <result name="success">/success.jsp</result>
10             <result name="error">/error.jsp</result>
11             <result name="regist">/regist.jsp</result>
12         </action>
13     </package>
14 </struts>
复制代码
复制代码

  (3)在jsp中的action请求代码如下:

复制代码
复制代码
 1   <body>
 2       <script type="text/javascript">
 3           function regist(){
 4               var form = document.forms[0];
 5               form.action = "login!regist";
 6               form.submit();
 7           }
 8       </script>
 9     <form action="login!login">
10         姓名:<input type="text" name="username" /><br/>
11         密码:<input type="password" name="psd" /><br/>
12         <input type="submit" value="登录" />
13         <input type="submit" value="注册" onclick="regist();">
14     </form>
15   </body>
复制代码
复制代码

2.直接指定 Action 元素的 method 属性

  使用这个方法就不必用 ! 将action和method连接后调用了,struts.xml 配置如下:

复制代码
复制代码
 1 <struts>
 2     <package name="default" namespace="/" extends="struts-default">
 3         <action name="login" class="com.main.action.LoginAction" method="login">
 4             <result name="success">/success.jsp</result>
 5             <result name="error">/error.jsp</result>
 6         </action>
 7         <action name="regist" class="com.main.action.LoginAction" method="regist">
 8             <result name="regist">/regist.jsp</result>
 9         </action>
10     </package>
11 </struts>
复制代码
复制代码

3.使用通配符处理

  <action>的属性name class method 都支持通配符。struts.xml 配置如下:

复制代码
复制代码
1 <struts>
2     <package name="default" namespace="/" extends="struts-default">
3         <action name="login_*" class="com.main.action.LoginAction" method="{1}">
4             <result name="success">/success.jsp</result>
5             <result name="error">/error.jsp</result>
6             <result name="regist">/regist.jsp</result>
7         </action>
8     </package>
9 </struts>
复制代码
复制代码

  关键就在于第三行代码, login_* 使用了通配符,所以接收所有类似的action请求,至于调用该类中的哪个方法,就看method="{1}",表示使用name属性第一个*的值。例如,在本例中,form的action属性值设置为 login_regist,则调用com.main.action.LoginAction类中的regist()方法。


此外,Struts支持默认 Action 请求。当系统找不到指定的Action时,则交给默认的Action去处理。在struts.xml中的配置为:

<package ...>

  <default-action-ref name="login"></default-action-ref>

</package>

 

转自:http://www.cnblogs.com/lihuiyy/archive/2012/05/30/2525730.html

posted @   君子笑而不语  阅读(590)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示