【Struts2進階】Struts2 多方法調用的兩種方式

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屬性方式雖然配置量大,但是可以通過通配符來簡化配置文件。所有就實際使用情況來看,第二種方案使用比較廣泛。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章