java

位置:IT落伍者 >> java >> 浏览文章

全程解析Struts中两个相似类的解释


发布日期:2023年10月03日
 
全程解析Struts中两个相似类的解释

DispatchAction

=======================

我自己认为DispatchAction可用可不用不过DispatchAction 确实提供了一些方便

下边简要对它的用法做一些说明

DispatchAction的作用简单地说就是把原来我们写在多个acton里的操作放在同一个

action里处理

举个例子就是如果在你的系统中有文章的管理操作那么通常有

以下操作添加文章察看文章搜索文章等等这样的话一般你会写

三个action[ArtilceSaveAction ArticleViewAction ArticleSearchAction ]分别处理各个操作

虽然说这样看起来是非常清晰流畅的操作但是你会发现在三个action理由太多的相同的东西

现在利用DispatchAction我们可以把相似的action放在一个action里操作

下面以上边的三个action和到一个action里为例

import ****;

import orgapachestrutsactionsDispatchAction;

public class ArticleAction extends DispatchAction{

/**

*AritcleAddAction

*/

public ActionForward add(ActionMapping mapping

ActionForm form

HttpServletRequest request

HttpServletResponse response)

throws Exception {

}

/**

*AritcleViewAction

*/

public ActionForward view(ActionMapping mapping

ActionForm form

HttpServletRequest request

HttpServletResponse response)

throws Exception {

}

/**

*AritcleSearchAction

*/

public ActionForward search(ActionMapping mapping

ActionForm form

HttpServletRequest request

HttpServletResponse response)

throws Exception {

}

}

好了该action的框架已经完成但是要想可用还要有一步不可少的操作

那就是更改你的action mapping 还以上边的例子如下

<action path=/article

input=/article/***jsp

parameter=method <!#####################>

scope=request

type=com***ArticleAction

validate=false>

<forward name=Success path=/article/***jsp redirect=true/>

</action>

看到上边你会发现它和我们通常的写法多个一项parameter=method这是有道理的并且非常重要

DispatchAction会根据具体的method值来确定调用addview 或者search

如下面的来自client的请求

articledo?method=add 则会触发添加文章的操作

以上只是根据一个简单的例子来分析DispatchAction实际应用的情况可能会更复杂

LookupDispatchAction

========================

orgapachestrutsactionsLookupDispatchActionjava

从名字大概我们也能看出LookupDispatchAction是DispatchAction的子类他们从功能上有许多相似的地方

下面还是以一个例子来简要的说明

通常它主要应用于在一个表单中有多个提交按钮而这些按钮又有一个共同的名字而这些按钮的名字要和具体的action mapping中的parameter的值对应[这点很重要]

如下代码截取自strutsconfigxml

<action path=/editArticle

type=com****EditArticleAction

name=AtricleForm

scope=request

parameter=action><!按钮的名字此处为action>

<forward name=success path=/***jsp/>

</action>

下面给出一个jsp页面的表单部分

<html:form action=/editArticle/>

<html:submit property=action>

<bean:message key=buttonview/>

</html:submit>

<html:submit property=action>

<bean:message key=buttondelete/>

</html:submit>

</html:form>

那么相应的ApplicationResourcesproperties中就会有如下片断

buttonview=View The Article

buttondelete=Delete The Atricle

此时还并为完成在LookupDispatchAction中有一个抽象方法

/**

*Provides the mapping from resource key to method name

*

*@returnResource key / method name map

*/

protected abstract Map getKeyMethodMap();

这个方法你应该在EditArticleAction中实现如下

protected Map getKeyMethodMap(){

Map map = new HashMap();

mapput(buttonview view);

mapput(buttondelete delete);

return map;

}

好了假设在你的EditArticleAction有如下方法

public ActionForward view(ActionMapping mapping

ActionForm form

HttpServletRequest request

HttpServletResponse response)

throws IOException ServletException {

//

//

return mappingfindForward(success);

}

public ActionForward delete(ActionMapping mapping

ActionForm form

HttpServletRequest request

HttpServletResponse response)

throws IOException ServletException {

//

//

return mappingfindForward(success);

}

下面实例几个假设client端的请求

此时页面有两个按钮按钮View The Article按钮Delete The Atricle

当提交按钮时调用EditArticleAction里的view方法

当提交按钮时调用EditArticleAction里的delete方法

以下还有一点说明

如果我有一个按钮要出发action的AA方法但是在该action没有AA方法此时将抛出异常如果该action中有两个AA方法则会调用第一个

               

上一篇:名词解释 什么是Eclipse?

下一篇:hibernate的关联关系配置问题