- Struts中有四種不同Action,分別如下:
- 1.Action
- 2.DispatchAction
- 3.LookupDispatchAction
- 4.MappingDispatchAction
- 關(guān)于Action在Struts中的工作流程,這里我就不多說了,只針對各種不同的Action詳解
- 第一種Action:是最普通、也是我們最先接觸的一種,但它僅支持一種業(yè)務(wù)方法,Action中只能允許有一個(gè)execute(),所有比較單一,有局限性,平時(shí)的項(xiàng)目中也用的少,或者說,它針對的是一個(gè)表單,一個(gè)Submit;
- 關(guān)于用法:Action中就一個(gè)execute(),而strut-config.xml也只需配置一具最普通的<action/>節(jié)點(diǎn),就夠了
<!-- Action -->
<action
attribute="loginForm"
name="loginForm"
path="/login"
scope="request"
type="org.svse.struts.action.LoginAction">
<forward name="ok" path="/ok.jsp"></forward>
<forward name="error" path="/error.jsp"></forward>
</action>
- 第二種DispatchAction:這是我們在平時(shí)的學(xué)習(xí)和項(xiàng)目中用的最多的一種,因?yàn)樗С侄鄠€(gè)業(yè)務(wù)方法的擴(kuò)展,使用起來也方便,或者說,它針對的是一個(gè)表單,多個(gè)Button;
- 關(guān)于用法:Action中需要幾個(gè)業(yè)務(wù)方法,就復(fù)制幾個(gè)execute(),然后改名即可,比如我們做加、減、乘、除,有四個(gè)方法,即:add(),sub(),mul(),div();而struts-config.xml中也只需配一個(gè)<action/>節(jié)點(diǎn);當(dāng)然,在涉及到有的業(yè)務(wù)是否需要表單驗(yàn)證時(shí),可以單獨(dú)再添加節(jié)點(diǎn)嘛
<!-- DispatchAction -->
<action
attribute="calForm"
name="calForm"
parameter="method"
path="/cal"
scope="request"
type="org.svse.struts.action.CalAction">
<forward name="result" path="/cal_result.jsp"></forward>
</action>
- parameter參數(shù)對應(yīng)的就是我們的業(yè)務(wù)方法了,在三種DispatchAction中都要用到它,因?yàn)橛辛怂?就可實(shí)現(xiàn)多業(yè)務(wù)的調(diào)用;
- 哪我們在視圖層,是如何調(diào)用的呢?很簡單:/cal.do?method=方法名(add、sub)
-
<script type="text/javascript">

function dosubmit(url)
{
var myform = document.myform;
myform.action = url;
myform.submit();
}
</script>
</head>
<body>
<!-- 一個(gè)表單多個(gè)按鈕 -->
<form method="post" name="myform">
第一個(gè)數(shù):<input type="text" name="num1"><br>
第二個(gè)數(shù):<input type="text" name="num2"><br>
<input type="button" value="加" onclick="dosubmit('cal.do?method=add')">
<input type="button" value="減" onclick="dosubmit('cal.do?method=sub')">
<input type="button" value="乘" onclick="dosubmit('cal.do?method=mul')">
<input type="button" value="除" onclick="dosubmit('cal.do?method=div')">
</form>
</body>
- 第三種LookupDispatchAction:此種Action恐怕是我們平時(shí)用的最少的一種了,盡管它也支持多業(yè)務(wù),或者說,它針對的是一個(gè)表單,多個(gè)Submit;
- 但用起來非常麻煩,需要struts標(biāo)簽,資源文件,Action中要Map集合;這里就大概說一下
- Actoin中業(yè)務(wù)方法跟上面一樣,只不過多一個(gè)包含Map的方法:
//通過資源文件的key(button.add),來找到業(yè)務(wù)方法add(),sub()

protected Map getKeyMethodMap()
{
Map map = new HashMap();
map.put("button.add","add");
map.put("button.sub","sub");
return map;
}
- 資源文件:
# Resources for parameter 'org.svse.struts.ApplicationResources'
# Project ch03
button.add=add
button.sub=sub
- struts-config.xml也跟上面一樣,根據(jù)method來找;
- 哪視圖組件如何來調(diào)用呢?
-
<!-- 一個(gè)表單多個(gè)提交 -->
<form action="cal2.do" method="post">
num1:<input type="text" name="num1"/><br>
num2:<input type="text" name="num2"/><br>
<html:submit property="method">
<bean:message key="button.add"/>
</html:submit>
<html:submit property="method">
<bean:message key="button.sub"/>
</html:submit>
<form>
怎么樣夠麻煩的吧。。。
- 第四種MappingDispatchAction:我自認(rèn)為它比DispatchAction差不多好用,只是它夠靈活(這里針對<action/>節(jié)點(diǎn),想咋配咋配),或者說,它針對的是多個(gè)表單,多個(gè)Submit;
- 關(guān)于用法,也比較簡單:
- Action中的業(yè)務(wù)實(shí)現(xiàn)跟DispatchAction一樣,strut-config.xml則要靈活些,針對每一個(gè)業(yè)務(wù)方法,配一個(gè)<action/>節(jié)點(diǎn):
<!-- MappingDispatchAction -->
<!-- add -->
<action
attribute="calForm"
name="calForm"
parameter="add"
path="/add"
scope="request"
type="org.svse.struts.action.Cal3Action">
<forward name="result" path="/cal_result.jsp" />
</action>
<!-- sub -->
<action
attribute="calForm"
name="calForm"
parameter="sub"
path="/sub"
scope="request"
type="org.svse.struts.action.Cal3Action">
<forward name="result" path="/cal_result.jsp" />
</action>
- 視圖組件的調(diào)用就很能夠方便了:直接跟/path路徑名.do:
-
<form action="add.do" method="post">
num1:<input type="text" name="num1"><br>
num2:<input type="text" name="num2"><br>
<input type="submit" value="加">
</form>
Struts中四種Action用法基本完畢,此純屬本人在學(xué)習(xí)過程中自己的總結(jié),若有不當(dāng)之處,愿不令賜教!!!
posted on 2009-03-16 10:43
獨(dú)孤行 閱讀(2018)
評論(7) 編輯 收藏 所屬分類:
Struts