【Struts2进阶】Struts2 多方法调用的两种方式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010028869/article/details/50850881

Action的创建一般可分为两种方式,第一是每个方法创建一个Action类,第二是一个Action中包含多个方法;在实际的开发中,一般不会采取第一种方案,因为项目中有多少方法,就需要建立多少的Action类,类多且配置量巨大,所以我们经常采用一个Action对应多个方法的方式。

那么问题来了,Struts2的Action中包含多个方法时如何调用?同样有两种方式可以选择,1. 方法的动态调用 2.通过配置method属性进行方法区分。请看下面的详细介绍。

方法的动态调用

1、新建Action

    package com.bjpowernode.struts2;

    import com.opensymphony.xwork2.ActionSupport;

    public class UserAction extends ActionSupport {

        private String messsage;

        public String getMesssage() {
            return messsage;
        }

        public void setMesssage(String messsage) {
            this.messsage = messsage;
        }

        public String add() throws Exception {
            messsage = "添加用户";
            return SUCCESS;
        }

        public String del() throws Exception {
            messsage = "删除用户";
            return SUCCESS;
        }

        public String update() throws Exception {
            messsage = "修改用户";
            return SUCCESS;
        }

        public String list() throws Exception {
            messsage = "查询用户";
            return SUCCESS;
        }

    }

2、Struts.xml中配置Action

    <package name="user-package" extends="struts-default">
        <action name="user" class="com.bjpowernode.struts2.UserAction">
            <result>/success.jsp</result>
        </action>
    </package>

3、JSP调用

调用格式为:action名称+!+方法名称+后缀

JSP代码:

    <%@ page language="java" contentType="text/html; charset=GB18030"
        pageEncoding="GB18030"%>
    <!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=GB18030">
    <title>Insert title here</title>
    </head>
    <body>
        <a href="user!add.action">添加用户</a><br>
        <a href="user!del.action">删除用户</a><br>
        <a href="user!update.action">修改用户</a><br>
        <a href="user!list.action">查询用户</a><br>

    </body>
    </html>

注意:

  1. Action中的所有方法必须和execute方法一致(参数,返回值,异常最好也一样)

  2. 动态调用参数配置,默认为true,可以调用,否则不能调用

    <constant name="struts.enable.DynamicMethodInvocation" value="false"/>  

配置method属性区分不同方法

struts.xml配置文件

    <package name="user-package" extends="struts-default">
        <action name="addUser" class="com.bjpowernode.struts2.UserAction" method="add">
            <result>/success.jsp</result>
        </action>

        <action name="delUser" class="com.bjpowernode.struts2.UserAction" method="del">
            <result>/success.jsp</result>
        </action>

        <action name="updateUser" class="com.bjpowernode.struts2.UserAction" method="update">
            <result>/success.jsp</result>
        </action>

        <action name="listUser" class="com.bjpowernode.struts2.UserAction" method="list">
            <result>/success.jsp</result>
        </action>
    </package>

这种方式的缺点是配置量大。


通配符简化配置文件

对上面Struts.xml配置文件进行简化:

<action name="*User" class="com.bjpowernode.struts2.UserAction" method="{1}">
    <result>/success.jsp</result>
</action>

在Struts2的标签class、name、method和result标签上都可以使用通配符,通配符的作用就是为了减少配置量,当然通配符需要建立在约定的基础上。


小结

方法的动态调用,方式比较繁琐,很容易写错,而且不易于后期维护和扩展;配置method属性方式虽然配置量大,但是可以通过通配符来简化配置文件。所有就实际使用情况来看,第二种方案使用比较广泛。

猜你喜欢

转载自blog.csdn.net/u010028869/article/details/50850881