Chinaunix首页 | 论坛 | 博客
  • 博客访问: 30480252
  • 博文数量: 708
  • 博客积分: 12163
  • 博客等级: 上将
  • 技术积分: 8240
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-04 20:59
文章分类

全部博文(708)

分类: Java

2008-04-15 16:48:38

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

protected ActionForward dispatchMethod
protected java.lang.reflect.Method getMethod
protected java.lang.String getMethodName
DispatchAction在配置上于标准的Action稍有不同,就是要在Action配置中多一个parametr属性,这个属性将指导DispatchAction找到
对应的方法,
例如这样配置:

        type="org.apache.struts.actions.DispatchAction"
        name="subscriptionForm"
  scope="request"
  input="/subscription.jsp"   
        parameter="method"/>

parameter的属性值是可以任意起的,只要你记得在传参数的时候统一就可以了。比如我写了一个类似这样的Action,它继承自DispatchAction类,
包含了三个操作方法,有Add(),Update(),Delete()。(在这个action里不必覆盖execute()方法,只需要包含与execute()方法有相同的签名并
同样声明抛出Exception异常的方法即可),而当我想要调用这个Action的Update操作时,提交的URL应该类似这样的:

""

就是这么简单,不过非常方便程序员,开发中的确省了好多代码,至少以前的三个类文件变成了现在一个类了,而且在后期维护的时候感觉也会方便很多。

需要注意的是:在调用DispatchAction的时候method参数是不能为空的,如果空,DispatchAction会调用unspecified方法并抛出异常。
实例代码如下:

/******************************************************************************
第二式:学习使用DynaActionForm
 DynaActionForm列举编写过程中遇到的与普通ActionForm的不同:

 1.最大的不同就是动态ActionForm是配置出来的(在struts-config.xml中),而不是通过编写.java文件;
 2.  中的type属性设置为"org.apache.struts.action.DynaActionForm"或者其子类;
 3.  在中添加子元素设置动态ActionForm的字段(对应于视图组件中的表项),其name属性制定字段名,
  type指定属性类型;
 4.  在处理该form的action类中,execute方法中的“ActionForm form”参数的类型仍然保持为其默认的ActionForm,而不是
  DynaActionForm,尽管DynaActionForm是从ActionForm继承而来,否则action不会执行任何逻辑。在这一点上,我用了一天多的时间才
  发现,不过其深层次的缘由还未发现;

 访问动态ActionForm的时候只需要对form进行类型转换即可,但其访问表项的方法要调用public Object get(String name)
 和 public void set(String name,Object value),这一点亦和普通ActionForm的访问方式不一样,DynaActionForm是把所有的属性
 保存在一个Map类对象中;

 另外一种声音:

  接触Struts久了不免会对其有这样或那样的看法,前阶段潜心研究Struts,对其中的动态ActionForm的使用就有一些意见,在这里跟大家
 说道说道,希望大家能够给点意见。

 一、用途
  动态ActionForm与标准的Form的用途如出一辙,都是为了能够作为DTO(Data Transfer Object)对向来与Action做数据传递,所不同的
 是动态ActionForm并没有一个专门的类作为DTO对象的载体,取而代之的是在Struts配置文件FormBean中增加属性配置项,来达到与DTO对象
 相同的作用。下面我们以用户登陆的应用为例,讨论一下普通的ActionForm与动态ActionForm的区别。

 用户通过输入用户名和密码后经过校验进入系统。过程描述的很简单,ActionForm设计起来也不复杂,我们只需要设定一下两个属性就可以了:
  private String userID;
  private String userPwd;

 最后,我们为着两个属性加上get和set方法就完成了普通ActionForm的设计。如果需要的话,我们还可以在这个Formli覆盖validate()方法
 来对用户输入的信息进行简单的校验。

 下面,我们就来看看动态ActionForm是通过怎样的设计来达到和上面同样的效果的吧!
 我们在struts-config文件中的标签中定义我们的动态Form,代码如下。
 
  
  

阅读(1383) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~