1,從Action中傳值到JSP頁面的方法
①在Action中定義一個成員變量,然后對這個成員變量提供get/set方法,在JSP頁面就可以取到這個變量的值了。
1)在Action中定義成員變量
//定義一個成員變量 private String message; //提供get/set方法 public String getMessage() { return message; } public void setMessage(String message) { this.message = message; }
2)在JSP頁面中取值
${message}或者
<s:property value="message"/>
②使用一些Servlet API進行值的存取操作:HttpServletRequest、HttpSession和ServletContext。Struts2對這個三個對象用Map進行了封裝,我們就可以使用Map對象來存取數據了。
1)在Action中存值
ActionContext actionContext = ActionContext.getContext(); //get HttpServletRequest Map<String,Object> request = (Map) actionContext.get("request"); request.put("a", "a is in request"); //get HttpSession //Map<String,Object> session = (Map) actionContext.get("session"); Map<String,Object> session = actionContext.getSession(); session.put("b", "b is in session"); //get ServletContext //Map<String,Object> application = (Map) actionContext.get("application"); Map<String,Object> application = actionContext.getApplication(); application.put("c", "c is in application"); //get ServletActionContext.request HttpServletRequest request=ServletActionContext.getRequest() request.setAttribute("c2", "test5"); request.put("c3","test6") //或者直接放入上下文中 ActionContext.getContext().put("d","d is in application");
2)在JSP頁面上取值(使用EL表達式)
${a} ${b} ${c} ${d} ${c2} ${c3} or ${requestScope.a} ${sessionScope.b} ${applicationScope.c} ${actionContext.d}
${requestScope.c2}
${requestScope.c3} or<%=request.getAttribute("d")%> //使用ActionContext.getContext().put("d","d is an application")的情況
附加:ServletContext,ActionContext,ServletActionContext的區別
在ActionContext.getContext().put("a", " test3")后頁面上用${a}或<s:property value="#a"/>獲得test3的值
#相當於ActionContext. getContext() ,#session.b表達式相當於ActionContext.getContext().getSession(). getAttribute(”b”)
③對於傳遞list的值,可以使用 actionContext的valueStack來傳遞值棧
1) 在后台使用Hibernate查詢 ,EntityManager 通過createQuery()來getResultList()獲得List,將list放入valueStack中
ActionContext.getContext().getValueStack().push(model);
2)在頁面上通過<s:iterator>標簽遍歷list的每條值顯示在table上。
- <table class="tablelist" >
- <thead>
- <tr>
- <th width="100px;">編號</th>
- <th>影片類型</th>
- <th>影片名稱</th>
- <th>發布人</th>
- <th>發布時間</th>
- <th>審核狀態</th>
- <th>操作</th>
- </tr>
- </thead>
- <tbody>
- <s:iterator value="recordList" var="o" status="i">
- <tr>
- <td>${o.id}</td>
- <td>${o.name }</td>
- <td>${o.type}</td>
- <td>${o.updateMember.memberName }</td>
- </tr>
- </s:iterator>
- </tbody>
- </table>
2,從前台向后台傳遞參數
①通過表單傳遞參數
1)在前端jsp頁面設置form表單,確定需要傳遞的參數name讓用戶在input中輸入,通過點擊按鈕后submit()提交到后台
- <s:form method="post" action="ActivityAction_toUI.action">
- <table class="serTable">
- <tbody>
- <tr>
- <td>
- <label>活動名稱</label>
- </td>
- <td>
- <input type="text" class="serput" name="activityName" placeholder="輸入文本"/>
- </td>
- <td>
- <s:submit cssClass="btn1" value="搜索" onclick="submit();" />
- </td>
- </tr>
- </tbody>
- </table>
- </s:form>
2)點擊搜索后activityName會放到HttpServletRequest 中
- HttpServletRequest httpReq = ServletActionContext.getRequest();
- String s = httpReq.getParameter("activityName");
另外,在后台也可以通過extends ActionSupport 並構建get/set方法在后台獲得其值
- private String activityName;
- public String getActivityName() {
- return activityName;
- }
- public void setActivityName(String activityName) {
- this.activityName = activityName;
- }
- public String list(){
- System.out.println(activityName);
- }
②通過超鏈接傳遞參數
1)前台通過超鏈接跳轉時將參數加到方法的后面
<s:a cssClass="acolor" target="mainBody" theme="simple" action="ActivityAction_info.action?Id=%{Id}&pageNum=%{pageNum}&infot=\"mylittlepony\"" ><img src="${pageContext.request.contextPath}/images/info.png" title="查看" /></s:a>
2)后台通過HttpServletRequest 獲得超鏈接后面參數所對應的值
- HttpServletRequest httpReq = ServletActionContext.getRequest();
- <pre name="code" class="java">Long id= Long.parseLong(httpReq.getParameter("Id"));
String s = httpReq.getParameter("infot");
Long pageNum = Long.parseLong(httpReq.getParameter("pageNum"));