Struts2 DMI动态方法调用和通配符

Struts2 DMI动态方法调用和通配符

更多请看  (www.omob.cc)


动态方法调用

1、Struts2默认关闭DMI功能,需要使用需要手动打开,配置常量

struts.enable.DynamicMethodInvocation = true

2、使用“!”方法,即action名称!方法名称。

struts.xml

<action name="query" class="action.QueryAction">  
    <result name="success">/success.jsp</result>  
    <result name="update">/update.jsp</result>  
</action>

请求URL为/query!success.action,调用actio.QueryActionsuccess()方法;请求URL为/query!update,调用actio.queryupdate()方法;

路径上的.action可以写也可以不写,Struts2默认添加.action为后缀,如果更改了后缀名,例如.do,就要显示声明。

3、好处:减少action数量,但是结果集数量不变。

通配符映射

  1. 不必配置struts.enable.DynamicMethodInvocation = true
  1. 写法

struts.xml

<action name="*_*" class="action.{1}Action" method="{2}">  
    <result>{1}_{2}Succ.jsp</result>  
</action>

请求URL为/Query_success,调用actio.QueryActionsuccess()方法;

{1}、{2}表示通配符的位置,这里{1}表示Query,{2}表示success;

{0}表示整个通配符,这里表示Query_success,所以上面的结果集也可以写成{0}Succ.jsp

  1. 好处:减少action数量的同时,减少结果集的数量,体现“约定优于配置”,在增加代码的同时,并不需要对struts.xml文件进行更改;

  2. URL请求顺序:当有多个action被匹配成功,例如XAction、Action、,对于请求XAction,则匹配XAction,忽视XAction的出现顺序,对于请求YAction,则由Action、在struts.xml的出现顺序决定,先出现的先调用

  3. 匹配带有“/”的路径:

(1)配置常量struts.enable.SlashesInActionNames = true

(2)有些书写用匹配带“/”的路径,但是本人实验结果不需要,直接/即可

DMI

action

package com.qianfeng.action;

import com.opensymphony.xwork2.Action;
import com.qianfeng.entity.User;

public class UserAction {
	private User user;
	
	public String add(){
		System.out.println("add");
		return Action.SUCCESS;
	}
	
	public String del(){
		System.out.println("del");
		return Action.SUCCESS;
	}
	
	public String update(){
		System.out.println("update");
		return Action.SUCCESS;
	}
	
	public String other(){
		System.out.println("other");
		return Action.SUCCESS;
	}

	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}
}

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>
	<!-- 打开开发模式,当修改了这个文件,不需要重启就有效果 -->
    <constant name="struts.devMode" value="true" />
    
    <!-- 打开动态方法调用 -->
    <!-- <constant name="struts.enable.DynamicMethodInvocation" value="true"/> -->

    <package name="default" namespace="/" extends="struts-default">
    	<!-- 
    		method="update"
    	 -->
        <!-- <action name="add" class="com.qianfeng.action.UserAction" method="add">
        	<result name="success">/ok.jsp</result>
        </action>
        
        <action name="del" class="com.qianfeng.action.UserAction" method="del">
        	<result name="success">/ok.jsp</result>
        </action>
        
        <action name="update" class="com.qianfeng.action.UserAction" method="update">
        	<result name="success">/ok.jsp</result>
        </action> -->
        
        <!-- 客户端可以访问任意的方法 -->
        <!-- <action name="user" class="com.qianfeng.action.UserAction">
        	<result name="success">/ok.jsp</result>
        </action> -->
        
        <!-- 提供一个默认的欢迎页面 -->
        <default-action-ref name="default"/>
        <action name="default">
        	<result>/ok.jsp</result>
        </action>
        
        <action name="user_*" class="com.qianfeng.action.UserAction" method="{1}">
        	<result name="success">/ok.jsp</result>
        </action>
    </package>

</struts>

login.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">
<title>Insert title here</title>
</head>
<body>
	${sessionScope.msg}
	<form action="login.action" method="post">
		用户名:<input type="text" name="user.username"/><br/>
		密码:<input type="password" name="user.password"/><br/>
		<input type="submit" value="登录"/>
	</form>
	
	<a href="add.action">add</a>
	<a href="del.action">del</a>
	<a href="update.action">update</a>
	
	<!-- DMI -->
	<a href="user!add">add</a>
	<a href="user!del">del</a>
	<a href="user!update">update</a>
	
	<!-- 通配符 -->
	<a href="user_add">add</a>
	<a href="user_del">del</a>
	<a href="user_update">update</a>
</body>
</html>

猜你喜欢

转载自blog.csdn.net/thinktik/article/details/80946409