分类: 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找到
对应的方法,
例如这样配置:
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.
3. 在
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文件中的