一、DMI动态方法调用的其中一种改变form表单中action属性的方式已经讲过了。还有两种,一种是改变struts.xml配置文件中action标签中的method属性,来指定执行不同的方法处理不同的业务逻辑;另外一种是使用通配符的方式。改变method属性的方式需要配置多个action,而且这些action定义的绝大部分都是相同的,所以这种定义是相当冗余的。因此,使用通配符就可以在一个action标签中代替多个逻辑处理的Action。
二、示范:(和之前的动态方法调用改变form表单action属性差不多,在struts.xml配置文件上进行了小小的修改。)
要求还是没有变,点击不同的提交按钮提交同一个表单,把不同的业务交给相同的Action处理类去处理。
⒈首先显示一个表单,表单中有两个提交按钮,但分别代表不同的业务。当点击登录时用户登录;当点击注册时用户注册。
⒉用户登录:
⒊用户注册:
具体的代码如下:
⑴、登录注册页面(index.jsp):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
<%@ 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" >
<script src= "js/jquery-1.7.2.js" ></script>
<title>index</title>
<script type= "text/javascript" >
$(function(){
$( "input:eq(3)" ).click(function(){
/*动态修改表单中的action属性值,实现把注册的请求提交给Action类 */
$( "#form" ).attr( "action" , "Create" );
});
});
</script>
</head>
<body>
<form action= "Login" method= "post" id= "form" >
姓名:<input type= "text" name= "name" /><br><br>
密码:<input type= "password" name= "password" /><br><br>
<input type= "submit" value= "登录" >
<input type= "submit" value= "注册" >
</form>
</body>
</html>
|
⑵、struts.xml配置文件的代码
1
2
3
4
5
6
7
8
9
10
11
12
|
<?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>
< package name= "myP" extends = "struts-default" >
<action name= "*" class = "action.Action" method= "{1}" >
<result name= "userLogin" >WEB-INF/jsp/userLogin.jsp</result>
<result name= "userCreate" >WEB-INF/jsp/userCreate.jsp</result>
</action>
</ package >
</struts>
|
解析:
1、在这份配置文件中,对action标签中的name属性配置了一个通配符: "*",后面的method属性值则为: {1}。
2、意思就是当用户在index.jsp页面点击了登录按钮,那么就会把表单: 中的action="Login"请求传给struts,因为在struts.xml中进行了通配符的配置,所以就把 "*"当成是"Login",也就是name="Login"。而后面的method值为:{1}代表的是第一个"*",也就是metho="Login"。所以struts会去action.Action类中寻找到Login方法并且调用。如果用户点击了注册按钮,那么也和点击登录按钮是一样流程了。具体可以自己写一个小例子感受一下。
⑶、Action类的代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
package action;
import com.opensymphony.xwork2.ActionSupport;
public class Action extends ActionSupport {
private String name; public String getName() {
return name;
}
public void setName(String name) {
this .name = name;
} public String Login(){
System.out.println( "用户登录" );
return "userLogin" ;
}
public String Create(){
System.out.println( "用户注册" );
return "userCreate" ;
}
}
|
当然,通配符的使用不仅仅是只有这么简单的一个,还可能是有: "*-*"、"Book_*" 等,这些通配符可以在struts.xml配置文件中action标签的属性中使用,如mthod、class属性,也可以在result标签中使用,如下:
1
2
3
4
5
|
<!--定义一个通用的action标签-->
<action name= "*" >
<!--使用表达式定义Result标签-->
<result>/WEB-INF/jsp/{ 1 }.jsp</result>
</action>
|
在上面的action定义中,action的name是一个*,那么就是可以匹配任意的Action,所有的请求都通过这个action来处理,因为这个action没有class属性,所以使用ActionSupport类来处理,因为没有method属性,所以默认是execute方法并且返回success字符串,而且在result标签中name属性默认是success,所以Action总是直接返回result中指定的jsp资源,因此上面的action定义的含义是:如果用户请求a.action那么就跳转到a.jsp;如果请求b.action就跳转到b.jsp。
以上所述是小编给大家介绍的struts中动态方法调用使用通配符,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
原文链接:http://www.cnblogs.com/demoMeng/archive/2016/09/07/5849691.html