1. 程式人生 > >轉+總結!! 關於jsp頁面取值方式

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

方式 deb 內置對象 req disabled 網上 查看 請求參數 ack

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")%>

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