Tuesday, July 11, 2006

Struts LookupDispatchAction html:image

在STRUTS体系结构中,如果用LookupDispatchAction类来处理表单,用html:image定义的图标来提交表单,实现方法如下:

1、将toaddnew和toupdate所需要的准备程序归到一个ACTION类中,如CornerKickLinkAction,它是 DispatchAction的一个子类,当然,在我的实现中,由于需要继承许多共享protected方法,CornerKickLinkAction 是ExtendedDispatchAction的子类,ExtendedDispatchAction是DispatchAction的一个子类,DA 是STRUTS的类,EDA只处理和SESSION、DATABASE CONNECTION有关的纯系统逻辑,CKLA则专责具体的CornerKick也就是说用户逻辑。如果有需要,诸如tolist或todelete所需要的程序也应该归到此类中。其余事项请参考STRUTS中有关DispatchAction的文献。

2、将doaddnew和doupdate、甚至dodelete和doaddasnew所需要的程序归到一个ACTION类中,如 CornerKickFormAction。它是LookupDispatchAction的一个子类。我的实现中, ExtendedLookupDispatchAction继承LookupDispatchAction,处理和session及database connection有关的逻辑,EventFormAction继承ELDA,共享的cancel处理和cursor处理写在这个类中,CKFA专责只和CornerKick添加和修改有关的逻辑。

3、html:image的定义中,property="method"必须和其余html:submit的property定义相同,这是为了兼容IE和FireFox的不同行为,在IE中,html:image所提交的request.getParameter("method")是null,而FireFox中会把html:image中定义的value随request送到服务器。因此,在服务器的DFA处理中,若method为null,那么可以肯定不是html:submit所提交的,而且很可能是IE,若method为html:image中的value,那么可以肯定是html: image所提交的,而且可能是FireFox。

4、注意,CANCEL键所提交的request.getParameter("method")也是null,因此必须在处理html:image的逻辑之前处理isCancelled(request)。

No comments: