Struts2標簽與Jsp的嵌入Java代碼之間的變量相互引用


  新年的第一天,對programer來說,和往常相比並沒有太大不同,代碼照樣敲。做了一天鍵盤俠,不見得有什么出彩的成就(其實一直以來似乎都是這樣/(ㄒoㄒ)/~~),倒是被曾經絆住的問題再次絆住然后糾結地解決了,順便復習了一下。問題就是在Struts2標簽和Jsp的Java代碼直接實現了變量相互引用。

  情景1:有一個在valuestack里面有一個變量,而我們目標除了獲得這個值之外,還可能會更改它的值,這個操作可能是通過webservice,service、dao等進行,而這些操作都要進行Java編碼實現,這里為了簡單起見,只是在Java代碼里面或者這個變量,並且更改它的值。借用<s:set />標簽以及Jsp的內置對象PageContext,具體如下:

  首先定義Action

public class MyAction extends ActionSupport implements ServletRequestAware, ServletResponseAware {

    HttpServletRequest httpServletRequest;

    HttpServletResponse httpServletResponse;

  //定義在valueStack的變量 String valueInValueStack; //省略setter和getter
public String execute() throws Exception { try {
        valueInValueStack
= "default value in valueStack"; System.out.println("valueInValueStack = "+valueInValueStack); //輸出:valueInValueStack = default value in valueStack return SUCCESS; } catch (Exception e) { e.printStackTrace(System.out); return ERROR; } } }

  在struts.xml里面配置該action

        <package name="test" extends="struts-default" namespace="/">
          //定義struts2的action MyAction
                <action name="myAction" class="com.test.MyAction" method="execute">
                        <result name="success">/jsp/result.jsp</result>
                </action>
        </package>

  定義MyAction的execute返回的頁面result.js<%@ page contentType="text/html;charset=UTF-8" language="java" %<%@ taglib prefix="s" uri="/struts-tags" %<html>

<head> <title></title> </head> <body> <p> 原本處於valuestack里面的值:<s:property value="valueInValueStack"/>
     //使用<s:set/>來定義一個名稱為newVariable的變量,並且它的值取自於valueStack <s:set var="newVariable" scope="page" value="valueInValueStack"/> </p> <%
     //在Jsp的內置對象pageContext取出該變量
     String s = (String)pageContext.getAttribute("newVariable"); out.println("內嵌Java代碼的值:"+s); s = "this is the newVariable, whose value is changed from valueStack";     //操作完成后,再次把該變量放置在pageContext里面,名稱保持不變。如果想在request或者session范圍獲取到該變量,就要放置到對應的范圍內
pageContext.setAttribute(
"newVariable", s); %> <p>
   
      //通過ognl的attr來獲取放置在pageContext的變量 更改后的值:<s:property value="%{#attr.newVariable}"/> </p> </body> </html>

  真實的result如下:

  在這過程中,起中轉作用的是pageContext,pageContext對象是javax.servlet.jsp.PageContext 類的實例,用來代表整個JSP頁面。這個對象主要用來訪問頁面信息,同時過濾掉大部分實現細節。這個對象存儲了request對象和response對象的引用。application對象,config對象,session對象,out對象可以通過訪問這個對象的屬性來導出。


免責聲明!

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



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