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

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

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

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

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

    ⒉用户登录:

    ⒊用户注册:  

  具体的代码如下:

    ⑴、登录注册页面(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页面点击了登录按钮,那么就会把表单:中的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中动态方法调用使用通配符,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索struts通配符
struts2动态方法调用、struts动态调用、struts2 dmi动态调用、struts2动态调用、struts 动态方法调用,以便于您获取更多的相关知识。

时间: 2024-11-23 13:43:54

struts中动态方法调用使用通配符_java的相关文章

Action动态方法调用

问题描述 现在有这样一个需求1级菜单是部门,2级菜单是根据部门的id获取到的条目.利用Struts2的动态方法调用.然后传一个部门id给这个方法,让Action的这个方法可以根据id获取到该部门下的条目.在前台调用EditFundAccount!loadFundAccountNameByOrgan如何给这个id传参Action方法实现如下:public String loadFundAccountNameByOrgan(Long id){ //TODO} 解决方案 总觉得方法定义错误action

webwork的动态方法调用(DMI)的问题?

问题描述 webwork的动态方法调用(DMI)的问题? 比如aaa!input.action的方法跳转页面,页面中有判断一个变量名是name的值,但是发现name是有值的,照道理这个方法跳转并不经过自己定义的action变量不应该会有值,不知道这个值是怎么来的,也就是动态方法调用的时候具体经过了哪些方法最后跳转页面?之前一直在用这个系统从来没发现过这个问题,最近才发现,而且代码已经很久没更新了不知道为什么现在会出现这个问题而以前没有?另外后来换了一个变量名就没这个问题了,不知道是不是变量名和系

指针-JVM 中多态方法调用问题

问题描述 JVM 中多态方法调用问题 很多人说对象有 指向方法区的指针.(应该说的是对象头部的Markword中有指向这对象的Class指针)但是如果子类继承一个父类 比如 Father f = new Son(), 这个引用是怎么找到 父类中方法信息的.难道Markword中还有指向 父类class的指针? 我知道 JVM 最终会把 符号引用解析为直接引用,就是想找到,这个 找到方法的直接引用是存在哪里的? 解决方案 不是,通俗地说,派生类其实是在基类的类型上加上派生类的代码合成的一个类型,因

asp.net 中静态方法和动态方法调用的区别实例分析_实用技巧

复制代码 代码如下: //定义静态方法class SQLHelper       {        public static string aaa()        {            return "你好"               }    } 调用:SQLHelper.aaa(); // 类名.方法名 //定义动态方法class SQLHelper       {        public string aaa()        {            return

java动态方法调度实例分析_java

本文实例讲述了java动态方法调度.分享给大家供大家参考,具体如下: 动态方法调度: 1. 访问一个引用型的变量的非静态方法,运行时与实际引用的对象的方法绑定. 2. 访问一个引用型的变量的静态方法,运行时与声明的类的方法绑定. 3. 访问一个引用型的变量的成员变量(包括静态变量和实例变量),运行时与声明的类的成员变量绑定. 第3点尤其注意啊,之前我从来没注意过啊 1. 非静态方法: public class Person { public String name; public void ge

Java编程中void方法的学习教程_java

void 关键字本节说明如何声明和调用一个void方法. 下面的例子声明了一个名为printGrade的方法,并且调用它来打印给定的分数. 示例 public class TestVoidMethod { public static void main(String[] args) { printGrade(78.5); } public static void printGrade(double score) { if (score >= 90.0) { System.out.println(

THINKPHP中D方法调用逻辑层类

ThinkPHP的D函数十分强大,一般情况下用D方法最多的情况是实例化自定义模型类,实现数据库相关的操作,但是D方法的功能远远不仅于此,D方法还可用于逻辑层,服务层自定义类的实例化. 调用格式如下: D('[项目://][分组/]模型','模型层名称') 关于D方法的一般用法本文不再描述,就是常见的D('User')实例化Model下面的UserModel.class.php. 我们在LIB_PATH,也就是和Controller(以前版本叫Action),Model文件夹同级的目录建立Logi

在Java的Struts中判断是否调用AJAX及用拦截器对其优化_java

Strut2判断是否是AJAX调用 1.   AJAX与传统Form表单实际上,两者一般都是通过HTTP的POST请求.区别是浏览器提交Form表单后,期望服务器返回一个完整的HTML页面.而AJAX调用是由XMLHttpRequest对象(不同浏览器可能不一样)发出,浏览器期望服务器返回HTML片段即可,具体是JSON.XML等都没有要求.返回到浏览器后如何使用,也是由JS脚本自己决定的.  2. 请求是不是AJAX那么对于服务器端,如何判断一个HTTP请求是不是AJAX调用?这需要看HTTP

在JSP文件中的同一个form表单有多个用来提交表单值的按钮,用户可以通过不同的按钮提交表单,需要调用Action中的不同处理方法,该怎么使用动态方法调用?

问题描述 Action 问题补充:是struts2 怎么修改jsP动态form的action名称呀? 解决方案 function formSubmit(){document.form1.method="post"; var url ="<%=request.getContextPath()%>/hrt/chartSichuan.do?method=recordList"; document.form1.action= url; document.form