超簡單方法解決Struts2中一個action處理多個請求


          超簡單方法解決Struts2中一個action處理多個請求
          關(guān)鍵字: struts2, action, 多個方法
              這幾天用Struts2+MySQL做名片管理系統(tǒng)的時候,遇到了一些問題,或許別人看來不是什么問題,但作為一個剛剛開始學(xué)習(xí)Struts2的新手,
          很多東西對我來說還是很有難度的.比如我現(xiàn)在要說的在一個action中處理多個請求的問題.

              簡要描述一下問題的產(chǎn)生:我要做的名片管理系統(tǒng)中的一個用戶管理模塊,其中有兩個最主要的方法就是登錄和注冊,這兩個方法都是在UserAction中處理.
          而按照通常的狀況而言,一個Action中只會有一個execute方法,也就只能解決一個請求(大概看了下Struts,好像其中可以通過在form中加一個hidden元素,
          然后再在execute方法中用getCommond()的方法來進(jìn)行判別).不過我在Struts2中沒有發(fā)現(xiàn)類似的解決辦法,這也很有可能是我剛剛學(xué)習(xí)Struts2造成的,
          畢竟到現(xiàn)在我都還沒弄到一本完整的教材,就只是到處找了些零散的資料,然后,做的過程遇到問題再自己猜想結(jié)合google找到的一些東西來尋求解決.

              遇到這個問題之后,我自己開始沒有想明白是什么狀況,該怎么解決.于是在網(wǎng)上找了下,找到的方法貌似都不是很簡單,要么就很復(fù)雜,要么就要涉及一些比較深的知識.
          后面我在執(zhí)行這個程序的時候,發(fā)現(xiàn)Eclipse提出的一個warning,而正是這個warning給了我很大的提示,讓我找到的解決方法.

              Warning是這樣的:No configuration found for the specified action: 'UserAction.action' in namespace: '/pages/user'.
          Form action defaulting to 'action' attribute's literal value. 原因就是我在struts.xml中定義的action的name與login.jsp中的form中的action的name不一致,
          將兩個的名字改成相同就好了,不要求以.action結(jié)束,如都為:LoginAction,也就是struts.xml中的<action name="LoginAction" class="main.UserAction">,
          和JSP頁面中的<s:form action="LoginAction" method="POST">.


              而在struts.xml中定義的action還有一個參數(shù)method,既然已經(jīng)可以根據(jù)action的name找到對應(yīng)的action,那還要這個參數(shù)做什么呢?另外,execute在不更改的情況下,
          也是默認(rèn)會調(diào)用的方法,再結(jié)合自己在網(wǎng)上找到的一些資料,我覺得可以嘗試一下將struts.xml中的action中的method進(jìn)行設(shè)置.
          于是就有了下面的兩個action的配置:struts.xml中的<action name="login" class="main.UserAction"  method="login">和
          JSP頁面中的<s:form action="login" method="POST">. 提交上面的表單form的時候,在struts.xml中找到該form對應(yīng)的action的方法為login(),
          于是就到類UserAction中找到該方法并調(diào)用.因而也就能夠調(diào)用UserAction類的login()方法了.
              這樣上面的問題也就可以解釋了:因?yàn)閮蓚€地方定義的方法的名字不同,所以在點(diǎn)擊登錄進(jìn)行l(wèi)ogin.jsp的時候就會彈出上述提示,
          但由于struts.xml中只定義(配置)一個action,默認(rèn)的方法為execute(),故而編譯器還是能夠找到該方法進(jìn)行執(zhí)行.
              根據(jù)上面的推斷,因而可以再添加一個注冊頁面register.jsp,將其中的表單form定義為:<s:form action="register" method="POST">,
          而將struts.xml增加一個設(shè)置:<action name="register" class="main.UserAction" method="register">.
          這樣當(dāng)register.jsp的action請求被攔截器攔截之后通過struts.xml的配置就可以找到UserAction類的register()方法進(jìn)行相應(yīng)的處理了,
          因而也就可以實(shí)現(xiàn)一個UserAction中處理多個請求action了.

              PS:由于本人剛剛學(xué)習(xí)Struts2不到兩個星期,而且以前也沒有接觸過Struts方面的程序設(shè)計.所以,
          肯定會有理解不對的地方,麻煩各位發(fā)現(xiàn)的朋友幫我指出來,謝謝

           來自:http://www.360doc.com/content/09/1122/16/144699_9541328.shtml

          posted on 2011-10-09 17:37 longsooooon 閱讀(1616) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          <2011年10月>
          2526272829301
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          統(tǒng)計

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 界首市| 诸暨市| 丹凤县| 钟祥市| 正蓝旗| 龙胜| 靖边县| 卢湾区| 漳平市| 竹溪县| 定边县| 博湖县| 西乌珠穆沁旗| 陆河县| 梁河县| 台中县| 台南县| 大邑县| 永德县| 衡阳县| 驻马店市| 奉新县| 安平县| 冕宁县| 忻城县| 兴业县| 沙河市| 沙雅县| 济宁市| 博湖县| 长丰县| 松桃| 舞钢市| 威宁| 涞水县| 土默特左旗| 黑山县| 长宁区| 金门县| 广饶县| 东阿县|