zoukankan      html  css  js  c++  java
  • struts2.3.1.2 使用动态方法配置 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>

  • 相关阅读:
    后台向前台输出 换行“ ”
    Razor视图引擎输出没有编码的 Html 字符串
    C#之delegate
    C#之Action
    What's New in C# 6.0
    Git 放弃修改
    Spring.Net+Nhibernate
    nmap扫描ip段
    nginx多个if条件并且查询
    查看哪些redis命令拖慢了redis
  • 原文地址:https://www.cnblogs.com/lihuiyy/p/2525730.html
Copyright © 2011-2022 走看看