Struts心得—DispatchAction使用日记

心得

Struts1.1发布了这么长时间了,我才刚刚开始系统地学习Struts的相关知识,经过前一阵潜心研究,对Struts1.1中已有的类DispatchAction有了进一步的认识。我将在这里总结一下,希望能对大家有所帮助。

在1.0版本中我们通常都是用execute方法来完成我们对业务逻辑的处理及页面的转发。通常在一个Action中我们都只能够完成一种业务逻辑的操作。如果要是完成多个业务逻辑(比如:添加、删除等)功能相近的业务逻辑我们就没有办法了么?答案是否定的,我们可以通过在页面中定义一个隐藏变量,在不同的页面要求处理不同的业务逻辑的时候我们可以赋予这个变量不同的值,并在execute方法中通过对变量值的判断来完成不同的业务逻辑操作。

举例来说,我们首先在页面中定义一个隐藏变量。

<html:hidden property="operAt"/>

然后定义一个JavaScript函数,我们可以在通过点击提交按钮的时候,在函数体里面修改它的值。

<SCRIPT>

function set(key) {

with(document.forms[0]){

operAt.value=key;

}

       }

</SCRIPT>

       当我们点击提交按钮便触发该事件,修改变量的值。

<html:submit onclick="set('save');">SAVE</html:submit>

       那我们在后台execute中又如何处理相关逻辑呢?

String operAt = myForm.getOperAt();

if (operAt.equals("create")) { ...

if (operAt.equals("save")) { ...

       很简单吧!虽然说这样做我们可以实现多个业务逻辑在同一个Action中实现,可是带来的代价便是代码的冗长,不易理解。

       下面我们就要介绍一下DispatchAction类了。它是Action的一个子类,它可以实现多个业务逻辑在同一个Action当中的实现,而上面的例子在DispatchAction中也就变成了下面的形式:

       public ActionForward create(

    ActionMapping mapping, 

    ActionForm form, 

    HttpServletRequest request, 

    HttpServletResponse response) 

throws Exception { ...

 

 

public ActionForward save(

    ActionMapping mapping, 

    ActionForm form, 

    HttpServletRequest request, 

    HttpServletResponse response) 

  throws Exception { ...

每一种业务逻辑都能在DispatchAction当中找到对应的方法。那么我们如何去实现这样的调用呢?DispatchAction中对struts-config.xml的配置比一般的Action配置稍显麻烦,举例来讲:

<action path="/telConsle"  type="com.meng.action.TelConsleDispatch" 

name="telForm" scope="request" validate="false" parameter="method"/>

       我们在这里指定了parameter的值为method,而当我们请求Action的时候我们必须指定method的值来确定去我们想要调用哪个Action方法。如:

http://localhost:8080/tsss/telConsle.do?method=save

       显然,通过显示链接指定参数值的方法可以达到我们调用方法的目的。然而我们如果不想显示调用的话我们应该怎样处理呢?还记得前面讲过的方法么?我们在页面中定义一个隐藏的变量,然后通过对变量的赋值来确定我们来确定我们将要执行的业务方法。在这里我们可不可以一样这样使用呢?

       答案是肯定的,我们当然可以通过定义一个类似于<html:hidden property="operAt"/>的变量,只要对该变量赋上对应DispatchAction中的方法的值来确定我们要调用的业务方法。然而笔者比提倡用Struts标签来定义这样的隐含的变量,因为Struts标签为动态标签,它可能需要在FormBean中定义该属性的get和set方法,而在parameter中定义的值不需要在FormBean当中定义get和set方法。笔者建议用html的标准标签<input>来定义该隐藏变量。因为该标签为静态标签,如果我们该用Struts标签的话可能导致页面出错。

       怎么样?通过上面的论述,您是否能够对DistpatchAction有了初步了解呢?关于DispatchAction用法小弟还是出此体验,有什么不足之处还希望各位大虾能批评指点!

时间: 2024-10-25 19:16:30

Struts心得—DispatchAction使用日记的相关文章

org.apache.struts.actions.DispatchAction.dispatchMethod是什么错?

问题描述 javax.servlet.ServletExceptionatorg.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:294)atorg.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)atorg.apache.struts.action.RequestProcessor.processActionP

spring 的mvc中有没有像struts的DispatchAction

问题描述 还是不喜欢,一个请求写一个action那也太烦了最好用spring的mvc也可以用像DispatchAction一样的action昂昂用的是spring mvc 解决方案 Spring中有个MultiActionController解决方案二:public class HomeController extends MultiActionController {public List list;//查询所有数据public ModelAndView TestOne(HttpServlet

一个Struts实现分页,增删改查,Tiles,国际化的DEMO

分页 这个DEMO供大家一起探讨学习Struts,因为工作太累,没精力给大家解释实现原理.如果看不懂,没关系.只是说明JSP基础还没有到火候,不要心急,回去强化下JSP+Servlet,基础扎实了,自然能够看懂我写的代码.这个DEMO借鉴了网上很多前人的经验,在此一并谢谢.web.xml文件:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE web-app PUBLIC "-//Sun Mic

Struts+Spring+Hibernate实现上传下载

上传|下载 引言 文件的上传和下载在J2EE编程已经是一个非常古老的话题了,也许您马上就能掰着指头数出好几个著名的大件:如SmartUpload.Apache的FileUpload.但如果您的项目是构建在Struts+Spring+Hibernate(以下称SSH)框架上的,这些大件就显得笨重而沧桑了,SSH提供了一个简捷方便的文件上传下载的方案,我们只需要通过一些配置并辅以少量的代码就可以完好解决这个问题了. 本文将围绕SSH文件上传下载的主题,向您详细讲述如何开发基于SSH的Web程序.SS

学习使用DispatchAction

DispatchAction继承自Action类,它是一个抽象类,封装了一些基础方法,来解决使用一个Action处理多个操作的能力,这就是DispatchAction最大的用途,它可以帮助我们用一个Action类,封装一套类似的操作方法,节省了类的数目,同时也减轻了后期维护的困难. DispatchAction中主要包括一下几个方法: protected ActionForward dispatchMethodprotected java.lang.reflect.Method getMetho

层层递进Struts1(七)详解DispatchAction

通过前面几篇博客,不知道大家有没有发现这个问题,虽然现在可以灵活控制跳转了,但是Action的数量 还是比较多,如何既能保证跳转灵活,还能减少Action的数量?这就是我们这篇博客所说的DispatchAction, 如其名,可以理解为"分发式Action",使用它可以避免为每个Action创建一个类. 我们先来看一下 实例. UserAction DispatchAction继承的是Action,它的特点就是把以前的多个Action合并为 一个,当多个Action关联较大时,可以像这

关于struts1.3中使用DispatchAction的一个问题

在action中 不能有execute方法,否则其他的方法则不能执行.     如下:   package com.yanek.mvc.demo; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionF

Struts Spring Hibernate (SSH) 整合实例

首选创建web.xml 主要是配置Struts的ActionServlet和Spring的字符过滤器 <?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="

在struts中关于HttpServletRequestWrapper的问题。。。

问题描述 我在代码中继承了类HttpServletRequestWrapper,代码如下:public class MyRequestWrapper extends HttpServletRequestWrapper {HttpSession iSession = null;public MyRequestWrapper(HttpServletRequest request) {super(request);} public HttpSession getSession() {if (null