• struts之动态方法调用使用通配符


    一、DMI动态方法调用的其中一种改变form表单中action属性的方式已经讲过了。还有两种,一种是改变struts.xml配置文件中action标签中的method属性,来指定执行不同的方法处理不同的业务逻辑;另外一种是使用通配符的方式。改变method属性的方式需要配置多个action,而且这些action定义的绝大部分都是相同的,所以这种定义是相当冗余的。因此,使用通配符就可以在一个action标签中代替多个逻辑处理的Action。

     

    二、示范:(和之前的动态方法调用改变form表单action属性差不多,在struts.xml配置文件上进行了小小的修改。)

        要求还是没有变,点击不同的提交按钮提交同一个表单,把不同的业务交给相同的Action处理类去处理。

        ⒈首先显示一个表单,表单中有两个提交按钮,但分别代表不同的业务。当点击登录时用户登录;当点击注册时用户注册。

          

         

     
        ⒉用户登录:

               

       
        ⒊用户注册:  

              

     

       具体的代码如下:

        ⑴、登录注册页面(index.jsp):

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <script src="js/jquery-1.7.2.js"></script>
    <title>index</title>
    <script type="text/javascript">
            $(function(){
                $("input:eq(3)").click(function(){
                    /*动态修改表单中的action属性值,实现把注册的请求提交给Action类  */    
                    $("#form").attr("action","Create");
                });
                
            });
    
    </script>
    
    </head>
    <body>
                <form action="Login" method="post" id="form">
                        姓名:<input type="text" name="name" /><br><br>
                        密码:<input type="password" name="password" /><br><br>
                        <input type="submit" value="登录">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                        <input type="submit" value="注册">
                </form>
    </body>
    </html>

        ⑵、struts.xml配置文件的代码

          

    <?xml version="1.0" encoding="UTF-8"?>
    
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
    
    
    <struts>
            <package name="myP" extends="struts-default">
                
                <action name="*" class="action.Action" method="{1}">
                        <result name="userLogin">WEB-INF/jsp/userLogin.jsp</result>
                        <result name="userCreate">WEB-INF/jsp/userCreate.jsp</result>
                </action>
                
            </package>
        
    </struts>
        
        

          解析:

            1、在这份配置文件中,对action标签中的name属性配置了一个通配符: "*",后面的method属性值则为: {1}。

            2、意思就是当用户在index.jsp页面点击了登录按钮,那么就会把表单:中的action="Login"请求传给struts,因为在struts.xml中进行了通配符的配置,所以就把 "*"当成是"Login",也就是name="Login"。而后面的method值为:{1}代表的是第一个"*",也就是metho="Login"。所以struts会去action.Action类中寻找到Login方法并且调用。如果用户点击了注册按钮,那么也和点击登录按钮是一样流程了。具体可以自己写一个小例子感受一下。 

        

           ⑶、Action类的代码:

    package action;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class Action extends ActionSupport {
    
        
        
        private String name;public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }public String Login(){
            
            System.out.println("用户登录");
            return "userLogin";
        }
        
        public String Create(){
            
            System.out.println("用户注册");
            return "userCreate";
        }
        
    }

     


      当然,通配符的使用不仅仅是只有这么简单的一个,还可能是有: "*-*"、"Book_*" 等,这些通配符可以在struts.xml配置文件中action标签的属性中使用,如mthod、class属性,也可以在result标签中使用,如下:

      

    <!--定义一个通用的action标签-->
    <action name="*">
             <!--使用表达式定义Result标签-->
             <result>/WEB-INF/jsp/{1}.jsp</result>
    </action>

         在上面的action定义中,action的name是一个*,那么就是可以匹配任意的Action,所有的请求都通过这个action来处理,因为这个action没有class属性,所以使用ActionSupport类来处理,因为没有method属性,所以默认是execute方法并且返回success字符串,而且在result标签中name属性默认是success,所以Action总是直接返回result中指定的jsp资源,因此上面的action定义的含义是:如果用户请求a.action那么就跳转到a.jsp;如果请求b.action就跳转到b.jsp。 

         


          本次讲解结束,谢谢浏览!

  • 相关阅读:
    sharepoint部署
    继承实体类出现传值时值不能保留
    面试经历
    sharepoint更换数据库链接
    asp.net c# 打开新页面或页面跳转
    sharepoint中配置工作流
    AD添加组织单位
    常用正则表达式
    删除多级非空目录
    C#实现对Word文件读写
  • 原文地址:https://www.cnblogs.com/demoMeng/p/5849691.html
Copyright © 2020-2023  润新知