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

来源:互联网 发布:风险概率影响矩阵图 编辑:程序博客网 时间:2024/05/21 12:39

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属性方式虽然配置量大,但是可以通过通配符来简化配置文件。所有就实际使用情况来看,第二种方案使用比较广泛。

0 0
原创粉丝点击