日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Struts2之一个Action包含多个控制处理逻辑

發(fā)布時(shí)間:2024/4/17 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Struts2之一个Action包含多个控制处理逻辑 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

http://www.cnblogs.com/freeabyss/p/3290297.html

一、使用Action的動(dòng)態(tài)方法調(diào)用

??? 如果一個(gè)頁(yè)面包含多個(gè)按鈕,系統(tǒng)分別提交給Action的不同方法處理.此時(shí)可以采用DMI(Dynamic Method Invocation,動(dòng)態(tài)方法調(diào)用)來(lái)處理這種請(qǐng)求。動(dòng)態(tài)方法調(diào)用是指表單元素的Action并不是直接等于某個(gè)Action名字,而且以如下形式指定表單的Action屬性:

?
1 2 3 <!-- action屬性為actionNmae!methodName的形式 其中ActionName指定提交到哪個(gè)Action,而methodName指定提交到指定方法--> action="ActionName!methodName"

?

其中一個(gè)按鈕的代碼如下:

<input type="submit" value="注冊(cè)" οnclick="regist();" />

上述代碼中指定“注冊(cè)”按鈕被單擊時(shí)觸發(fā)regist函數(shù),該函數(shù)的代碼如下:

<script type="text/javascript"> function regist(){targetForm = document.forms[0];targetForm.action = "login!regist"; } </script>

?

上述JavaScript代碼改變了表單元素的Action屬性,修改后的屬性為login!regist,其實(shí)質(zhì)就是將該表單提交給login Action的regist方法處理。

struts.xm中的配置:

<package name="lee" extends="struts-default"><action name="login" class="org.crazyit.app.action.LoginAction"><!-- 定義三個(gè)邏輯視圖和物理資源之間的映射 --><result name="error">/error.jsp</result><result name="success">/welcome.jsp</result></action> </package>

?

注意:使用動(dòng)態(tài)方法調(diào)用前,必須設(shè)置Struts2允許動(dòng)態(tài)方法調(diào)用,需要設(shè)置struts.enable.DyanmicMethodInvocation常量為true。

二、指定method屬性及使用通配符

??? 1)使用method屬性

<action name="login" class="org.crazyit.app.action.LoginAction" method="execute"><result name="error">/error.jsp</result><result name="success">/welcome.jsp</result> </action> <action name="regist" class="org.crazyit.app.action.LoginAction" method="regist"><result name="error">/error.jsp</result><result name="success">/welcome.jsp</result> </action>

?

???? 對(duì)應(yīng)的javaScript代碼為:

?

function regist(){targetForm = document.forms[0];targetForm.action = "regist"; }

?

??? 2)使用通配符

在上述的struts.xml文件中,兩個(gè)Action定義絕大部分相同,可見這種定義相當(dāng)冗余,為了解決這個(gè)問(wèn)題,Struts2可以使用通配符。

在配置<action ../>時(shí),允許在指定name屬性時(shí)使用通配符,然后在class、method屬性及<result…/>子元素中使用{N}的形式來(lái)代表前面第N個(gè)星號(hào)所匹配的子串。

示例一:

<action name="*Action" class="org.crazyit.app.action.LoginAction" method="{1}"><result name="error">/error.jsp</result><result name="success">/welcome.jsp</result> </action>

?

例如,如果請(qǐng)求URL為loginAction.action,則調(diào)用LoginAction類的login方法,如果請(qǐng)求URL為registAction.action,則調(diào)用LoginAction類的regist方法。

示例二:

<action name="*_*" class="org.crazyit.app.action.{1}Action" method="{2}"><result name="error">/error.jsp</result><result name="success">/welcome.jsp</result> </action>

?

例如,如果請(qǐng)求URL為Book_save.action,則對(duì)應(yīng)的處理類為BookAction,處理方法為save方法。

??? 3)對(duì)子元素使用通配符

Struts2不僅允許在class屬性、name屬性中使用表達(dá)式,還可以在<result…/>子元素中使用{N}表達(dá)式。

<action name="*" ><result>/{1}.jsp</result> </action>

?

上面的Action的定義可以匹配任意的Action,所用的用戶請(qǐng)求都可通過(guò)Action來(lái)處理,因?yàn)闆]有指定class屬性,該Action使用ActionSupport來(lái)作為處理類,而且因?yàn)樵揂ctionSupport類的execute方法返回success字符串, 即該Action總是直接返回result中指定的JSP資源,JSP資源使用表達(dá)式來(lái)生成資源名。上面Action定義的含義是如果請(qǐng)求a.aciton,則進(jìn)入a.jsp頁(yè)面;如果請(qǐng)求b.action,則進(jìn)入b.jsp頁(yè)面……

通過(guò)這種方式,可以避免讓瀏覽者直接訪問(wèn)系統(tǒng)的JSP頁(yè)面,而是讓Struts2框架來(lái)管理所有用戶請(qǐng)求。

對(duì)于使用Struts2框架的應(yīng)用而言,盡量不要讓超級(jí)鏈接直接連接到某個(gè)視圖資源,因?yàn)檫@種方式增加了額外的風(fēng)險(xiǎn)。推薦將所有請(qǐng)求都發(fā)送給Struts2框架,讓框架來(lái)處理用戶請(qǐng)求,即使只是簡(jiǎn)單的超級(jí)鏈接。

??? 4)關(guān)于因通配符帶來(lái)的優(yōu)先級(jí)的問(wèn)題。

假設(shè)有URL為abcAction.action的請(qǐng)求,在struts.xml文件中配置了如下三個(gè)Action,它們的name的值分別為:abcAction、*Action和*,則這個(gè)請(qǐng)求將會(huì)被名為abcAction的Action處理。

假設(shè)有URL為defAction.action的請(qǐng)求,在struts.xml文件中配置了如下三個(gè)Action,它們的name的值分別為:abcAction、*Action和*,則*Action不會(huì)比*更優(yōu)先匹配defAction.action的請(qǐng)求,而是先找到那個(gè)Action,就會(huì)由那個(gè)Action來(lái)處理用戶請(qǐng)求。

?

總結(jié)

以上是生活随笔為你收集整理的Struts2之一个Action包含多个控制处理逻辑的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。