`
Luob.
  • 浏览: 1590028 次
  • 来自: 上海
社区版块
存档分类
最新评论

Struts2 动态方法调用(十三)

阅读更多
附件中有完整的案例!
1.动态方法调用
在业务逻辑处理action中,可以包含一个或者多个逻辑处理方法。
例如:在jsp文件中的同一个form表单中 有多个用来提交的表单值的按钮,可当用户通过不通的按钮提交表单的时候,需要笤俑Action中的不同的处理方法,这是就需要使用动态方法调用。
在使用动态方法调用时候,提交请求的action属性值,有以下几种方法
  action=“Action名称!方法名”
或者
  action=“Action名称!方法名.action”
或者
  采用通配符 {}来进行动态方法调用 
或者
  method 配置多个同一个action 不同的 method


2.案例:登录/注册(采用  “!” “通配符”“ method属性” 三种方法实现 )
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>
	<!--==================== -->
	<!--=====定义常量========= -->
	<!--==================== -->
	
	<!-- 修改请求的后缀名为.do 修改后每个请求必须要有后缀了-->
	<constant name="struts.action.extension" value="do,action"/>
	<!-- 对于 采用 "!方法名"这种方法有用 ,采用通配符就不需要设置这个了 -->
	<constant name="struts.enable.DynamicMethodInvocation" value="false"/> 
	<!-- 默认的视图主题 <constant name="struts.ui.theme" value="simple"/>-->
	<!--+===================+-->
	<!--+=====定义基本包=======+-->
	<!--+===================+-->
	<package name="default" extends="struts-default">
		<action name="showPerson" class="com.luob.action.ShowPerson">
			<result name="success">/showPerson.jsp</result>
		</action>
	</package>
	
	<!-- 使用“!”进行动态方法的调用 -->
	<package name="user" extends="struts-default" namespace="/user">
		<action name="loginRegister" class="com.luob.action.ShowPerson">
			<result name="success">/index.jsp</result>
			<result name="reg">/initPerson.jsp</result>		
		</action>
	</package>
	
	<!--使用通配符  来进行动态方法的调用 -->
	<package name="user2" extends="struts-default" namespace="/user2">
		<action name="userAction_*_*" class="com.luob.action.ShowPerson" method="{1}">
			<result name="success">/index.jsp</result>
			<result name="reg">/initPerson.jsp</result>		
		</action>
	</package>
	
	<!-- 使用Method来动态指定调用某个Action中的方法 -->
	<package name="user3" extends="struts-default" namespace="/user3">
		<action name="login" class="com.luob.action.ShowPerson">
			<result name="success">/index.jsp</result>
		</action>
		<action name="register" class="com.luob.action.ShowPerson" method="register">
			<result name="reg">/initPerson.jsp</result>		
		</action>
	</package>
	
</struts>


Action.java
package com.luob.action;

import com.luob.model.Person;
import com.opensymphony.xwork2.ActionSupport;

public class ShowPerson extends ActionSupport {

	private Person person;  //采用POJO的方式进行赋值和存值
    private String tip;
	@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		setTip("您单击了【登录】按钮!您使用帐号"+person.getName()+"登录成功!");
		return SUCCESS;
	}
	
	public String register(){
		setTip("您单击了【注册】按钮!亲填写下面的信息吧!");
		return "reg";
	}
	
	public Person getPerson() {
		return person;
	}
	public void setPerson(Person person) {
		this.person = person;
	}
	public String getTip() {
		return tip;
	}
	public void setTip(String tip) {
		this.tip = tip;
	}
}


login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags"  prefix="s"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>My JSP 'login.jsp' starting page</title>
	<SCRIPT type="text/javascript">
		function reg(){
			var targetForm=document.forms[0];
			targetForm.action="user/loginRegister!register.action";
			targetForm.submit();
		}
		
		function reg2(){
			var targetForm=document.forms[1];
			targetForm.action="user2/userAction_register.action";
			targetForm.submit();
		}
		
		function reg3(){
			var targetForm=document.forms[2];
			targetForm.action="user3/register.action";
			targetForm.submit();
		}
	</SCRIPT>

  </head>
  
  <body>
 	 <center>
 	 	<!-- 使用 “!”来动态调用方法 -->
    	<s:form action="user/loginRegister!execute.action" method="post" theme="simple">
    		<ul style="list-style: none;">
    			<li>帐号:<s:textfield name="person.name"/></li>
    			<li>密码:<s:textfield name="person.password"/></li>
    			<li>
    				<input type="button" value="注册" onclick="reg()"/>
    				<s:submit value="登录"/>
    			</li>
    		</ul>
    	</s:form>
    	
    	<!-- 采用通配符 进行方法动态调用 -->
    	<s:form action="user2/userAction_.action" method="post" theme="simple">
    		<ul style="list-style: none;">
    			<li>帐号:<s:textfield name="person.name"/></li>
    			<li>密码:<s:textfield name="person.password"/></li>
    			<li>
    				<input type="button" value="注册" onclick="reg2()"/>
    				<s:submit value="登录"/>
    			</li>
    		</ul>
    	</s:form>
    	<!-- 采用method属性动态调用方法-->
    	<s:form action="user3/login.action" method="post" theme="simple">
    		<ul style="list-style: none;">
    			<li>帐号:<s:textfield name="person.name"/></li>
    			<li>密码:<s:textfield name="person.password"/></li>
    			<li>
    				<input type="button" value="注册" onclick="reg3()"/>
    				<s:submit value="登录"/>
    			</li>
    		</ul>
    	</s:form>
    </center>
  </body>
</html>


initPerson.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>My JSP 'initPerson.jsp' starting page</title>
  </head>
  
  <body>
   <center>
   	<s:form action="showPerson" method="post">
   		<s:textfield name="person.name" label="姓名"/>
   		<s:textfield name="person.sex"  label="性别"/>
   		<s:textfield name="person.age" label="年龄"/>
   		<s:textfield name="person.address" label="住址"/>
   		<s:submit value="提交"/>
   	</s:form>
   </center>
  </body>
</html>

4
4
分享到:
评论
1 楼 zeyonq 2014-04-23  
调试成功,感谢帮助。

相关推荐

    Struts2动态方法调用

    Struts2作为一款流行的Java Web框架,其动态方法调用(Dynamic Method Invocation,DMI)功能为开发者提供了极大的灵活性。在传统的MVC模式中,控制器(Controller)通常通过硬编码的方式处理请求,而动态方法调用则...

    Struts2_动态方法调用

    Struts2_动态方法调用,使用struts2架构的动态方法进行资源调用

    struts2 动态方法调用(DMI)

    Struts2 动态方法调用(DMI,Dynamic Method Invocation)是Struts2框架中一个特色功能,允许开发者通过URL直接调用Action类中的方法,而无需预先在配置文件中显式声明这些方法。这种机制增加了开发的灵活性,但也...

    struts 2 action 动态调用

    ### Struts 2 Action 动态方法调用详解 #### 一、引言 在Struts 2框架中,Action动态方法调用是一项非常实用的功能。它允许开发者在一个Action类中定义多个处理方法,而不仅仅局限于传统的`execute()`方法。这种...

    struts2动态访问调用-method方法

    Struts2作为一款流行的Java Web框架,其动态访问调用机制是其强大特性的体现之一。在实际开发中,我们经常需要根据用户的不同操作来执行不同的业务逻辑,这时`struts2`的`method`属性就显得尤为重要。本文将深入探讨...

    struts2中动态方法的调用

    在Struts2框架中,动态方法调用是一个非常实用且灵活的功能,它允许开发者通过URL中的参数来决定控制器中具体调用哪个方法。这不仅提高了代码的可读性和可维护性,还使得处理不同的请求变得更加直观和高效。下面将...

    struts2的API耦合与动态方法调用

    本文将重点讨论Struts2中的API耦合和动态方法调用,这两种特性对于理解框架的工作原理和提高代码的灵活性至关重要。 首先,我们来看看Struts2 API耦合的几种方式: 1. **ActionContext类**:ActionContext是Struts...

    struts2利用通配符调用同一个Action里面不同的方法

    在Struts2中,Action是业务逻辑处理的核心,而通配符的使用则是Struts2框架中一种灵活的配置方式,允许我们以更简洁的方式调用同一个Action中的不同方法。下面我们将深入探讨如何利用Struts2的通配符来实现这一功能...

    struts2动态调用之通配符

    Struts2作为一款流行的Java Web框架,其动态调用功能为开发者提供了极大的便利。在处理多样化的用户请求时,能够灵活地映射不同的操作(methods)到同一个Action,从而简化配置,提高代码的可维护性。本文将深入探讨...

    struts2动态方法配置

    Struts2动态方法调用是该框架的一个重要特性,它允许开发者通过URL直接映射到Action类中的方法,而不仅仅是类。这种灵活性极大地增强了应用程序的可扩展性和可维护性。在Struts2中,动态方法调用是通过ActionMapper...

    详解Struts2动态方法调用

    Struts2 动态方法调用详解 Struts2 框架提供了动态方法调用的机制,允许一个 Action 对应多个请求,从而减少 Action 的数量。这种机制可以提高系统的灵活性和可维护性。 方法一:指定 Method 属性 在 Struts2 中...

    Struts2之异步调用机制详解案例struts014

    在Struts2中,异步调用机制是实现页面动态更新和提高用户体验的关键技术之一。这个案例“struts014”很可能展示了如何在Struts2中实现异步调用来处理耗时操作,如数据库查询或复杂计算。 异步调用的基本概念是,...

    Struts2中直接和间接访问ServletAPI以及动态方法调用之感叹号

    在Struts2框架中,直接和间接访问Servlet API以及动态方法调用是两个关键概念,它们对理解和优化应用性能至关重要。 首先,让我们深入理解直接访问Servlet API。在传统的MVC模式中,Servlet扮演着控制器的角色,...

    一个Action多方法调用的Struts 2的应用程序

    利用Struts 2框架创建一个web项目chap2_e22,实现用户登录过程。具体要求是在loginAction类中分别用login()和registered()处理用户登录和注册的过程,分别创建login.jsp和register.jsp两个页面实现登录和注册的...

    struts2笔记之动态调用Action指定方法及默认Action

    Struts2 动态调用 Action 指定方法及默认 Action 配置 Struts2 框架中,一个 Action 可以包含多个处理逻辑,而不是只有一个 execute() 方法。在实际开发中,我们经常需要在一个 Action 中实现多个处理逻辑,这样...

    struts2实验一:动态方法调用+请求参数的获取+简单的表单数据验证

    在Struts2中,动态方法调用是其一大特性,允许开发者通过URL直接调用Action类中的方法。默认情况下,Struts2会尝试将Action类的公共方法与请求路径关联,如果请求路径与Action类的方法名匹配,那么这个方法就会被...

    Struts2登陆+输入验证+动态调用实例

    Struts2的动态方法调用(Dynamic Method Invocation,DMI)允许我们根据用户输入来决定执行哪个Action方法。在没有明确的方法名时,Struts2会尝试匹配Action类中的方法。这种方式增加了代码的灵活性,但同时也可能...

    struts2动态访问方式

    在Struts2框架中,这种动态访问主要体现在Action类的实例化和方法调用上,极大地提高了应用的可扩展性和可维护性。下面将详细介绍Struts2动态访问方式的相关知识点。 首先,Struts2的核心是DispatcherServlet,它...

    Struts2调用EJB异常项目包

    Struts2调用EJB异常项目包,出现的问题以及解决方案参见EJBStruts.zip中的说明.txt 以及博客 http://blog.csdn.net/icecream0/article/details/7167853

Global site tag (gtag.js) - Google Analytics