10、一个action中处理多个方法的调用第二种方法method的方式

在实际的项目中,经常采用现在的第二种方式在struct.xml中采用清单文件的方式

 

我们首先来看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;
    }
    
}

 

接下面我们看看struct.xml的配置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <!-- 当struts.xml配置文件发生修改,会立刻加载,在生产环境下最好不要配置 -->
    <constant name="struts.configuration.xml.reload" value="true"/>
    <!-- 会提供更加友好的提示信息 -->
    <constant name="struts.devMode" value="true"/>
    
    <!-- 禁用动态调用 -->
    <!-- 
    <constant name="struts.enable.DynamicMethodInvocation" value="false"/>
     -->
    <package name="user-package" extends="struts-default">
      <!-- name="addUser"用在jsp中调用的。名字可以随便起,但是method中的名字add必须和action中的函数名字一一对应 -->
        <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>

 

接下面我们来看看访问的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="addUser.action">添加用户</a><br>
    <a href="delUser.action">删除用户</a><br>
    <a href="updateUser.action">修改用户</a><br>
    <a href="listUser.action">查询用户</a><br>
    
</body>
</html>

 

跳转成功之后的jsp sucess.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>
${messsage }
</body>
</html>

 

上面就完成了配置,但是上面的配置存在一个很大的问题,就是在struct.xml文件中配置量较大,我们可以使用通配符的方式解决这个问题,其他的文件都不用修改,只需要修改struct.xml文件就可以

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <!-- 当struts.xml配置文件发生修改,会立刻加载,在生产环境下最好不要配置 -->
    <constant name="struts.configuration.xml.reload" value="true"/>
    <!-- 会提供更加友好的提示信息 -->
    <constant name="struts.devMode" value="true"/>
    
    <!-- 禁用动态调用 -->
    <!-- 
    <constant name="struts.enable.DynamicMethodInvocation" value="false"/>
     -->
    <package name="user-package" extends="struts-default">
      <!-- name="addUser"用在jsp中调用的。名字可以随便起,但是method中的名字add必须和action中的函数名字一一对应 -->
        <action name="*User" class="com.bjpowernode.struts2.UserAction" method="{1}">
            <result>/success.jsp</result>
        </action>
        
    </package>
</struts>

 

当在index.sjp点击添加用户的时候,访问的是addUser.jsp,那么在struct.xml进行匹配,得到的*代表的就是add,method中的{1},1表示的是得到第一个*的值,就是add,然后就访问action中对应的add函数,减少了代码的配置

总结:

Struts2的Action中包含多个方法如何调用(使用通配符)

具体配置
<action name="*User" class="com.bjpowernode.struts2.UserAction" method="{1}">
<result>/{1}Success.jsp</result>
</action>

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

 

posted on 2017-12-24 10:51  luzhouxiaoshuai  阅读(337)  评论(0编辑  收藏  举报

导航