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

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

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

    posts - 11,  comments - 28,  trackbacks - 0
    今天在看JPetStore代碼時(shí),對(duì)他的鏈接中的請求參數(shù)感到疑惑,最后發(fā)現(xiàn)是自己的對(duì)Struts框架不熟悉導(dǎo)致的。
    我是從Net陣營中剛轉(zhuǎn)入Java里的,在Net中對(duì)請求參數(shù)的名稱無特殊限制,只要在頁面中取參數(shù)的值即可。當(dāng)然這個(gè)功能在Java中也具備。即request.Getparameter()

    今天我在看JpetStore代碼時(shí),在點(diǎn)擊
    http://127.0.0.1:8083/JPetStore/shop/viewCategory.shtml?categoryId=BIRDS
    時(shí),當(dāng)跟蹤函數(shù)viewCategory時(shí)發(fā)現(xiàn)此時(shí)categoryID已經(jīng)賦值了,我卻找不到在什么地方賦值的,好是花費(fèi)了一番周執(zhí)。
    查看此段鏈接對(duì)應(yīng)的struts.xml

    ????
    <action?path="/shop/viewCategory"?type="org.apache.struts.beanaction.BeanAction"
    ????????????name
    ="catalogBean"?scope="session"
    ????????????validate
    ="false">
    ??????
    <forward?name="success"?path="/catalog/Category.jsp"/>
    我首先跟蹤BeanAction的excute函數(shù)發(fā)現(xiàn)在此之前就已經(jīng)賦值,說明和BeanAction無關(guān),是Struts系統(tǒng)本身的結(jié)構(gòu)。我故意將鏈接修改,修改成
    http://127.0.0.1:8083/JPetStore/shop/viewCategory.shtml?category=BIRDS
    此時(shí)出現(xiàn)錯(cuò)誤,錯(cuò)誤如下:
    java.lang.IllegalArgumentException:?Cannot?invoke?com.ibatis.jpetstore.presentation.CatalogBean.setCategory?-?argument?type?mismatch
    ????org.apache.commons.beanutils.PropertyUtilsBean.invokeMethod(PropertyUtilsBean.java:
    1778)
    ????org.apache.commons.beanutils.PropertyUtilsBean.setSimpleProperty(PropertyUtilsBean.java:
    1759)
    ????org.apache.commons.beanutils.PropertyUtilsBean.setNestedProperty(PropertyUtilsBean.java:
    1648)
    ????org.apache.commons.beanutils.PropertyUtilsBean.setProperty(PropertyUtilsBean.java:
    1677)
    ????org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:
    1022)
    ????org.apache.commons.beanutils.BeanUtilsBean.populate(BeanUtilsBean.java:
    811)
    ????org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:
    298)
    ????org.apache.struts.util.RequestUtils.populate(RequestUtils.java:
    493)
    ????org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:
    805)
    ????org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:
    203)
    ????org.apache.struts.action.ActionServlet.process(ActionServlet.java:
    1194)
    ????org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:
    414)
    ????javax.servlet.http.HttpServlet.service(HttpServlet.java:
    689)
    ????javax.servlet.http.HttpServlet.service(HttpServlet.java:
    802)
    根據(jù)這個(gè)錯(cuò)誤堆棧可知,它實(shí)際上采用的是反射,setProperty,此時(shí)找不到category的Setter函數(shù)報(bào)錯(cuò)。然后我查看了一下RequestProcessor的默認(rèn)實(shí)現(xiàn)代碼
    //?Process?any?ActionForm?bean?related?to?this?request
    ActionForm?form?=?processActionForm(request,?response,?mapping);
    processPopulate(request,?response,?form,?mapping);
    這段函數(shù)功能為:
    1)調(diào)用processActionForm( )方法檢查是否存在為ActionMapping配置的ActionForm 。如果存在,則在有效區(qū)
    域內(nèi)查找是否存在該ActionForm 的實(shí)例,存在,則復(fù)用,不存在,則創(chuàng)建一個(gè)實(shí)例。然后將實(shí)例保存與再配置
    文件中配置好的有效區(qū)域(request,session,application)內(nèi),并用Action元素的name屬性作為該實(shí)例的關(guān)鍵字。
    2)調(diào)用processPopulate( )方法,如果存來存在為ActionMapping配置的ActionForm,則封裝請求對(duì)象中的數(shù)據(jù)
    到ActionForm 中,在進(jìn)行封裝之前,先調(diào)用ActionForm 的reset( )方法進(jìn)行屬性值的默認(rèn)化。

    根據(jù)以上的分析,可得知,在調(diào)用鏈接前struts框架會(huì)自動(dòng)的將所有的請求參數(shù)封裝入指定的formbean中。所以請求參數(shù)的名稱應(yīng)該是對(duì)應(yīng)formbean的一個(gè)屬性。

    這就是struts中請求參數(shù)的處理過程。主要是我對(duì)struts還沒有完全掌握,加上Net的影響,才花費(fèi)了一圈發(fā)現(xiàn)這個(gè)原因。
    posted on 2007-01-15 20:56 滌生 閱讀(970) 評(píng)論(0)  編輯  收藏

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


    網(wǎng)站導(dǎo)航:
     
    <2007年1月>
    31123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    常用鏈接

    留言簿(5)

    隨筆檔案

    UML

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 国产午夜影视大全免费观看| 久久国产精品免费专区| 精品亚洲成a人在线观看| jlzzjlzz亚洲jzjzjz| 亚洲国产美女在线观看| 亚洲黄色网址大全| 亚洲图片校园春色| 亚洲中文字幕久久精品无码2021| 亚洲欧洲日本精品| 久久精品国产亚洲av麻豆蜜芽 | 99热免费在线观看| 免费人成在线观看网站| 久操视频在线免费观看| 88xx成人永久免费观看| 亚洲一区二区三区免费在线观看| 2020因为爱你带字幕免费观看全集 | 国产在线不卡免费播放| 免费一看一级毛片人| 亚洲精品无码专区久久同性男| 亚洲第一黄色网址| 亚洲精品无码专区在线在线播放| 亚洲人成色7777在线观看| 亚洲av永久无码制服河南实里| 久久久久亚洲精品美女| 亚洲精品乱码久久久久久下载 | 亚洲?V乱码久久精品蜜桃| 亚洲婷婷国产精品电影人久久| 自拍偷自拍亚洲精品情侣| 亚洲AV无码AV男人的天堂| 亚洲天堂一区二区三区| 色婷婷六月亚洲综合香蕉| 国产裸体美女永久免费无遮挡| 男人都懂www深夜免费网站| 国产精品永久免费10000| 午夜一级毛片免费视频| 亚洲精品成人区在线观看| 久久久久久久尹人综合网亚洲| 久久国产亚洲高清观看| 亚洲国产精品美女久久久久| 免费无码又爽又黄又刺激网站| 国精产品一区一区三区免费视频 |