1. 程式人生 > >struts2在action中傳遞引數給頁面的方法

struts2在action中傳遞引數給頁面的方法

由於在Action中並不能直接誒訪問Servlet API,但它提供了相關類ActionContext來訪問HttpServletRequest、HttpSession和ServletContext,所以在向前端頁面傳值的方法就出現了多樣化。一般我們經常使用的就是通過request、session來傳值,至於Application範圍這一級別的基本上用的少。

1. 首先如果變數是Action的全域性變數,並且定義了Setter方法,那麼此時無須做任何更多工作,只要它有值在前端頁面就可以取到。此時取值的方法大概有這幾種:

  • 使用Java程式碼:<%= request.getParameter(“str”)%>, <%=request.getAttribute(“str”)%> 這兩種方式通常不推薦,原則上html程式碼不用摻雜Java程式碼;
  • 使用EL表示式:${str};
  • 使用Struts2標籤:<s:property value=”str” /> ;
  • 使用OGNL表示式:<s:property value=”#request.str”/>.

2. 對應方法體內的區域性變數,我們可以放在request裡面,也可以放在session裡面。但是,只有在必要的時候才放在session裡面。

(1)放在request裡面:

a. 直接呼叫ActionContext提供的put方法:ActionContext.getContext().put(key, value);此時的取值方式有:

  • 使用Java程式碼:<%=request.getAttribute("str") %>,同樣不推薦;
  • 使用EL表示式:${str };
  • 使用Struts2標籤:<s:property value=”str”/>;
  • 使用OGNL表示式:<s:property value=’'#request.str”/>.

b. 使用ActionContext提供的get方法:Map request = (Map)ActionContext.getContext().get("request"); request.put(key, value);此時的取值方式有:

  • 使用Java程式碼:<%=request.getAttribute("str") %>,同樣不推薦;
  • 使用EL表示式:${str };
  • 使用OGNL表示式:<s:property value=’'#request.str”/>.

c. 使用ServletActionContext訪問HttpServletRequest得到Servlet中的request:HttpServletRequest request = ServletActionContext.getRequest(); request.setAttribute(key, value);此時的取值方式有:

  • 使用Java程式碼:<%=request.getAttribute("str") %>,同樣不推薦;
  • 使用EL表示式:${str };
  • 使用OGNL表示式:<s:property value=’'#request.str”/>.

(2)放在session裡面:

a. 使用ServletActionContext訪問HttpServletRequest得到Servlet中的request,再由request得到session:HttpServletRequest request = ServletActionContext.getRequest();

    HttpSession session = request.getSession(); session.setAttribute(key, value);或session.putValue(key, value);(已過時,不推薦使用),此時的取值方式有:

  • 使用Java程式碼:<%=session.getAttribute("str") %>或<%=session.getValue("sstr") %>(與putValue對應,已過時,不推薦使用);
  • 使用EL表示式:${str };
  • 使用OGNL表示式:<s:property value=’'#session.str”/>.

b.直接使用ActionContext.getContext().getSession():這種方式取值與上面的完全一樣,不再贅述