欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

struts中动态方法调用使用通配符

程序员文章站 2024-03-13 18:14:51
一、dmi动态方法调用的其中一种改变form表单中action属性的方式已经讲过了。还有两种,一种是改变struts.xml配置文件中action标签中的method属性,...

一、dmi动态方法调用的其中一种改变form表单中action属性的方式已经讲过了。还有两种,一种是改变struts.xml配置文件中action标签中的method属性,来指定执行不同的方法处理不同的业务逻辑;另外一种是使用通配符的方式。改变method属性的方式需要配置多个action,而且这些action定义的绝大部分都是相同的,所以这种定义是相当冗余的。因此,使用通配符就可以在一个action标签中代替多个逻辑处理的action。

二、示范:(和之前的动态方法调用改变form表单action属性差不多,在struts.xml配置文件上进行了小小的修改。)

    要求还是没有变,点击不同的提交按钮提交同一个表单,把不同的业务交给相同的action处理类去处理。

    ⒈首先显示一个表单,表单中有两个提交按钮,但分别代表不同的业务。当点击登录时用户登录;当点击注册时用户注册。

struts中动态方法调用使用通配符

    ⒉用户登录:

struts中动态方法调用使用通配符

    ⒊用户注册:  

struts中动态方法调用使用通配符

  具体的代码如下:

    ⑴、登录注册页面(index.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">
<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配置文件的代码    

<?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页面点击了登录按钮,那么就会把表单:struts中动态方法调用使用通配符中的action="login"请求传给struts,因为在struts.xml中进行了通配符的配置,所以就把 "*"当成是"login",也就是name="login"。而后面的method值为:{1}代表的是第一个"*",也就是metho="login"。所以struts会去action.action类中寻找到login方法并且调用。如果用户点击了注册按钮,那么也和点击登录按钮是一样流程了。具体可以自己写一个小例子感受一下。

       ⑶、action类的代码:

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标签中使用,如下:

<!--定义一个通用的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中动态方法调用使用通配符,希望对大家有所帮助