轉+總結!! 關於jsp頁面取值方式


1.      前台往后台傳值,通過提交表單,在后台有set,get方法,可以直接取到。如果通過request.getParameter(paramName) 去獲取通過會報空指針異常。 其中request是HttpServletRequest的實例。解決的方法是,在后台action類里面定義request的get/set方法。其中get方法要這樣寫:

                                             public HttpServletRequest getRequest() {

                                                                                    if (request == null)

                                                              request =ServletActionContext.getRequest();

                                                           return request;

                                                     }

 

這時,通過getRequest().getParameter(paramName)就可能成功的獲取前台傳過來的請求參數值。

順便提一句,並不是前台提交表單的每個表單域都會生成請求參數的,而是有name屬性的表單域才生成請求參數。如果有多個表單域有相同的name屬性,則多個表單域只能生成一個請求參數,只是該參數有多個值。如果某個表單域設置了disabled=“disabled”,則該表單域不再生成請求參數。

 

2.    對於表單內,屬性有name的表單域,只要在后台有這個name屬性的值一樣的成員變量的get/set方法。該表單域的值就可以自動獲取了。比如<input name=”ask” type=”text” value=””/>, 在后台action里面定義了一個成員變量ask,且有setAsk() 和getAsk()方法,<inputname=”ask” type=”text” />的value就可以動態從后台設置獲取。

3.      第二種獲取值的方法:EL表達式:${param}。不管是后台傳來的值,還是其他前端頁面傳來的值,都可以通過${}獲取到。后台傳過來的屬性值(也就是在后台通過setAttribute()方法設置的屬性)也可以通過EL表達式取得。順便提一下。在前端頁面通過request.setAttribute()設置的屬性值,在后台,以及跳轉頁面都獲取不到(原理不熟,不過感覺不應該,但嘗試下是這樣的情況)。

4.   通過struts2標簽獲取:<s:property value=””/>。其中這里需要注意一點:value屬性取值,什么時候要加“#”,什么時候不用加?

       回答:如果取ValueStack中的值時,是不需要帶#的,可以直接取。比如Action實例的屬性值是存儲在ValueStack中的,所以取Action中的屬性是不需要帶#號的。注意在使用<s:iteratorid="it" value="attrName">時,后使用it去取對象屬性時,是需要加#號的。取Stack Context里面的值,都需要加#。

        可能有讀者不知道ValueStack和Stack Context分別存儲什么。

       這里在幫大家貼出網上別人給出的答案:(常見的)

       valuestack:action所有成員變量,fieldErrors,actionErrors,actionMessage,exception以及你自定義的攔截器或action里自己寫進去的變量

eaPriceJsonStr是action中的屬性(有set/get方法)

<div >1---${eaPriceJsonStr }---</div>
<div >2---${action.eaPriceJsonStr }---</div>
<div >3---<s:property value="eaPriceJsonStr"/>---</div>
<div >4---<s:property value="#action.eaPriceJsonStr"/>---</div>
<div >5---<s:property value="#request.eaPriceJsonStr"/>---</div>  都可以

       Stack Context:parameters、request、session、application、pageContext這些web容器內置對象,還有就是頁面通過<s:set/><s:iterator/>等標簽設置的臨時變量.

  一、用struts標簽獲取:<s:property value="#session.sessionid"/>
  二、<%=request.getSession.getAttribute("sessionid");> session也是內置對象之一,可以直接用session,比request.getSession方便多了,也可以寫成<%=session.getAttribute("sessionid");>
  三、el表達式獲取:${sessionScope.sessionid}

      最直接的查看的方法是在頁面添加<s:debug></s:debug>.然后在瀏覽器中打開該頁面就可以看到[Debug]這樣的鏈接。點進去就可以看到這兩個里面究竟存儲了什么。非常方便。

       使用<s:debug></s:debug>可以發現,在Stack Context里面有三個key:action、request、attr.

        我們也可以通過這三個key,在web前端獲取值。比如,在action里面有參數值param.在頁面除了這樣獲取:

${param}、

${action.param}、

<s:property value="param"/>、 

<s:property value=“#action.param”/>,

<s:property value=“#request.param”/>   但是不可這樣${ request.param}

 

特別注意:EL表達式不能在struts2標簽中使用:<s:property value="${param} "/>是錯誤的Accordingto TLD or attribute directive in tag file, attribute value does not accept anyexpressions

 

5.  通過JSP輸出表達式。

   參數:

<%=request.getParameter(paramName)%>。

  屬性值:

<%=request.getAttribute("attributeName")%>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM