<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 78, comments - 34, trackbacks - 0, articles - 1
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

             今天是Sturts1的最后一天,老佟下午做了一個(gè)綜合性練習(xí),十分經(jīng)典!通過(guò)這個(gè)練習(xí)也讓我感覺(jué)到了老佟的功力深厚。這個(gè)練習(xí)明天我再做。

     

             今天的重點(diǎn)內(nèi)容有:MappingDispatchAction、動(dòng)態(tài)的ActionForm、預(yù)顯表單、struts國(guó)際化和文件上傳!

     

    一、MappingDispatchAction

             我們知道一個(gè)DispatcherAction可以處理多個(gè)用戶請(qǐng)求(通過(guò)sturts-config.xml配置),但一個(gè)DispatchAction只能有一個(gè)ActionForm。這就是它的最大缺點(diǎn),所以Sturts為我們提供了一個(gè)折中的處理辦法——MappingDiapatchAction(位于ActionDispatchAction之間)。

             我們?cè)诠こ讨行绿砑右粋€(gè)MappingDispathAction

    import javax.servlet.http.*;

    import org.apache.struts.action.*;

    import org.apache.struts.actions.MappingDispatchAction;

     

    public class TestMappingDispatchAction extends MappingDispatchAction {

        // add處理

        public ActionForward add(ActionMapping mapping, ActionForm form,

               HttpServletRequest request, HttpServletResponse response)

               throws Exception {

           System.out.println("TestDispatchAction.add");

           return mapping.findForward("success");

        }

        // find處理

        public ActionForward find(ActionMapping mapping, ActionForm form,

               HttpServletRequest request, HttpServletResponse response)

               throws Exception {

           System.out.println("TestDispatchAction.find");

           return mapping.findForward("success");

        }

    }

     

             struts-config.xml添加:

    <action path="/add"

               type="cn.itcast.cc.actions.TestMappingDispatchAction"

               parameter="add"

               name="AddActionForm">

    </action>

    <action path="/find"

               type="cn.itcast.cc.actions.TestMappingDispatchAction"

               parameter="find"

               name="FindActionForm">

    </action>

     

             此時(shí)JSP頁(yè)面中的請(qǐng)求連接必須修改為:

    <html:link action="/add">add</html:link>

    <html:link action="/find">find</html:link>

            

    老佟推薦使用MappingDispatchAction。在特殊情況下使用DispatchedAction吧!

     

    二、動(dòng)態(tài)的ActionForm

             我們?cè)谑褂?/span>ActionForm時(shí),我們必需手動(dòng)添加代碼。如果ActionFrom非常多時(shí)我們就需要手動(dòng)添加大量代碼。動(dòng)態(tài)的ActionForm則不老板娘我們手動(dòng)添加代碼。

     

             例,處理用戶登陸的動(dòng)態(tài)ActionForm,向struts-config.xml中添加:

    <form-beans>

           <form-bean name="dynaAction" type="org.apache.struts.action.DynaActionForm">

               <form-property name="username" type="java.lang.String" />

               <form-property name="password" type="java.lang.String" />

           </form-bean>

    </form-beans>

             不需要手動(dòng)編寫ActionForm,“type="org.apache.struts.action.DynaActionForm"”是struts中自帶的ActionForm。“name="username"”必須與表單的字段名稱相對(duì)應(yīng)。“type="java.lang.String"”字段值的類型,需要指定全類名。

     

    三、預(yù)顯表單

             比如用戶修改自己的信息,當(dāng)用戶修改并提交了錯(cuò)誤信息里。表單頁(yè)面需要給出提示,并回顯用戶提交的數(shù)據(jù)(而不是顯示空表或修改之前的原表),因?yàn)橛脩艨赡苄薷牧宋鍌€(gè)地方,確只有一個(gè)地方的數(shù)據(jù)不合法。

             這個(gè)解決方法很簡(jiǎn)單,只需要使用strutsHTML標(biāo)簽即可。比如顯示用戶名的標(biāo)簽“<html:text property="username"/>”。因?yàn)槲覀冊(cè)?/span>struts-config.xml中配置了這個(gè)頁(yè)面的namescope屬性,所以,struts先去到scope指定的域中查找名稱為name的屬性指定的ActionForm

             當(dāng)請(qǐng)求派發(fā)到指定的頁(yè)面之前,Strtus會(huì)取出ActionForm中對(duì)應(yīng)的字段值,并生成value=”字段值添加到<input …>中。

             除了使用插件結(jié)合html標(biāo)簽進(jìn)行校驗(yàn)外,這個(gè)回顯的功能也是strutshtml標(biāo)簽的一大特色!

     

    四、Struts國(guó)際化

             還記得以前學(xué)習(xí)的WEB應(yīng)用的國(guó)際化嗎?(使用的是JAVA國(guó)際化組件)回憶一下,我們需要編寫一個(gè)屬性文件,比如名為“language.properties”它是默認(rèn)的文件如果國(guó)際化組件找不到與本地語(yǔ)言對(duì)應(yīng)的配置文件就會(huì)使用這個(gè)默認(rèn)文件。中文的文件名應(yīng)該為“language_zn_CN.properties”、英文的文件名為“language_en_US.properties”,它們的鍵名稱相同,但值是相應(yīng)國(guó)家的同義文字。然后我們需要調(diào)用ResourceBundle.getBundle(“l(fā)anguage”);返回一個(gè)ResourceBundle對(duì)象,它根據(jù)計(jì)算機(jī)本地默認(rèn)語(yǔ)言加載對(duì)應(yīng)的配置文件。之后根據(jù)需要調(diào)用ResourceBundle.getString(String key); 返回需要的值。

     

             嗯嗯,Struts中的國(guó)際化與此相同。比如我們之前使用的錯(cuò)誤信息資源文件“MessageResources.properties”我們?cè)?/span>struts-config.xml指定了它被做為struts的資源:

    <message-resources parameter="MessageResources"></message-resources>

    同樣,我們定義中文的資源文件為“MessageResources_zh_CN.properties”、英文的資源文件為“MessageResources_en_US.properties”,它們的鍵名相同,但值是相應(yīng)國(guó)家的同義文字。struts-config.xml不需要修改。這樣,Struts在加載struts-config.xml文件時(shí),也會(huì)自動(dòng)根據(jù)本地默認(rèn)語(yǔ)言加載相應(yīng)的資源文件。這樣在以后的應(yīng)用直,直接使用鍵名即可獲取本地語(yǔ)言的值。比如:

    new ActionMessage("username.exist")

    如果本地默認(rèn)語(yǔ)言是中文,則信息值為:“用戶已存在!”。如果本地默認(rèn)語(yǔ)言是英文,則信息值為:“user name already exist!”。

     

    五、文件上傳

             這個(gè)也很簡(jiǎn)單哦~~(說(shuō)著簡(jiǎn)單,看著也簡(jiǎn)單,做就是另一回事兒了!)。

    我們以前的文件上傳是怎么實(shí)現(xiàn)的?需要加載“commons-fileupload”和“commons-io”兩個(gè)jar包,在處理文件上傳表單的servlet中調(diào)用“ServletFileUploadObj.parseRequest(request);”方法解析request,然后遍歷它返回的List并調(diào)用“FileItemObj.isFormField()”判斷這一項(xiàng)是表單字段還是文件上傳,如果是文件上傳則保存文件

     

    Struts中的文件上傳也需要使用“commons-fileupload”和“commons-io”兩個(gè)jar包。我們?cè)O(shè)計(jì)的表單必須使用strutshtml標(biāo)簽,在文件上傳標(biāo)簽處使用“<html:file…>”:

    file: <html:file property="file"></html:file>

     

             在對(duì)應(yīng)的ActionForm中需要添加一個(gè)“FormFile”類型的成員,它用于存放提交的文件信息和文件輸入流。Ok,這樣我們就可以在處理表單的Action中直接獲取文件提交字段了!

     

             今天做一下簡(jiǎn)單的總結(jié),沒(méi)有添加代碼詳細(xì)說(shuō)明。框架是簡(jiǎn)單了程序的開(kāi)發(fā),這是十分有意義的,它可以節(jié)省很多不必要的工作,利于項(xiàng)目的擴(kuò)展與維護(hù)。它使得程序員可以節(jié)省更多的時(shí)間用于學(xué)習(xí)或做項(xiàng)目研究,怎么能說(shuō)成是毀程序員的飯碗呢?!

     

             今天下午的那個(gè)練習(xí)十分經(jīng)典,這個(gè)我明天來(lái)做一下。突然從WEB基礎(chǔ)跳到框架的學(xué)習(xí),多少有些不習(xí)慣,尤其是第一天。不過(guò)現(xiàn)在好些了,也更期待學(xué)習(xí)hibernate框架和spring框架,并將他們應(yīng)用于項(xiàng)目中!

     

             加油!

     

    我總給自己加油,當(dāng)然也有那些關(guān)心我的親人和朋友們,感謝他們!


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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 免费永久在线观看黄网站| 日韩免费毛片视频| 亚洲a一级免费视频| 久久久国产精品无码免费专区| 亚洲国产精品无码av| 亚洲毛片在线免费观看| 亚洲爆乳无码专区www| 中文字幕亚洲一区二区三区| 一个人免费日韩不卡视频| 一区二区三区免费视频播放器 | 亚洲嫩草影院久久精品| 久久久久久精品成人免费图片| 亚洲国产高清国产拍精品| 亚洲欧洲日韩综合| 伊在人亚洲香蕉精品区麻豆| 无码人妻AV免费一区二区三区| 国产99精品一区二区三区免费| 精品日韩99亚洲的在线发布| 亚洲高清成人一区二区三区| 最近的中文字幕大全免费8| 国产成人综合亚洲一区| 久久精品国产精品亚洲艾| 全免费一级毛片在线播放| 中文字幕免费在线视频| 亚洲一线产区二线产区区| 亚洲大尺度无码专区尤物| 久久精品亚洲乱码伦伦中文| xvideos亚洲永久网址| 日本午夜免费福利视频| 热久久精品免费视频| 成人毛片免费在线观看| 久操视频免费观看| 理论片在线观看免费| 亚洲av日韩av综合| 亚洲国产av美女网站| 亚洲av无码精品网站| 亚洲国产精品久久| 日韩精品一区二区亚洲AV观看| 亚洲成av人在线观看网站| 精品国产麻豆免费人成网站| 亚洲区视频在线观看|