struts2值棧 set和push和el在jsp中取值


  • 值棧包含兩個 context(域對象框架存入) 和根對象(push,set) //源碼dofilter----actionContext

    push通過壓棧后的數據是在最頂層,用 value="top" 來取值即可;

  • 值棧后進先出的原則  

    set和map的混到一起 從上到下取值;[0].name; set一般是集合;push一般是屬性

1.獲取值棧對象兩種方式:

1 //獲取值棧  //方式一   分為root區和上下文區;
2 ActionContext.getContext.getValueStack();
3 //方式二
4 ServletActionContext.getValueStack(ServletActionContext.getRequest); 

2.

1.set和push set存儲的是集合
2.域對象是上下文;取值的是#request.name ,省掉了get,直接寫屬性
3.root根對象,省掉了root 方法要寫全; length(); get可以不寫
表單提交可以獲取EL:name //源碼是request重寫getAttribute;
模型驅動 ;自動存儲到valuestack的root區中

值棧:分為根對象和上下文.  上下文存儲的是域對象request,pageContext等等

1)根對象存入的是對象的屬性以鍵值對的方式.

2)並且是后存入的在最上邊,先存人的在最下邊

3)取值的是從上邊取值,下邊的取不到.但是可以通過 [第一個對象].屬性取到

2. 值棧中的值獲取

 

 取值的3中方式 set 和push 和 el 
//set可以取到的是集合,push最好取到的是對象;    set: key.屬性名  push: 屬性名
  set("users",users);
//1.迭代的取值方式  
jsp中的標簽
<s:iterator var="user" value="users"> //values是放入到域中的集合, user是每一個遍歷的對象 <s:propety value="#user.u_id" /> //迭代器要用#取值 ${user.u_id}                     //用el 也是可以取到值 <s:iterator>                  //需要迭代的取值的方式

//2.有相同的name的時候set和push同時使用example: <s:property value="name"/> <s:property value="[1].name"/> //想取值棧中第二個對象值 //3.模型驅動和屬性驅動獲取的都是取屬性 但是模型驅動創建一個對象在值棧中去//////////////////////// <s:property value="name"/> <s:property value="age"/> el:表達式 ${name }===request.getAttribute("key"); ${age } 用request存入到值棧中的是(上下文) 去域對象中去取,value="#request.name"; // %的作用 不具備取 值棧的中的數據 %的作用 <s:textfield value="%{#request.name}"/>struts中的標簽 <s:textfield value="%{#request.name}"/>//不解析 //國際化的取值,動態取值 $的作用在國際化中使用;key= ${#request.name} //1.配置常量 struts <constant name="struts.custom.i18n.resources" value="ab"></constant> //2.創建一個ab.propertites 文件 key= hello ${#request.name} //3.存入值棧中 request.setAttribute("name","王五"); String text=getText("key"); sysout(text);//打印的是hello 王五.. //國際化

 

 

 

補充:根對象的取值

//三步驟:1.獲取根對象2.獲取上下文map集合3.表達式("#"表示的是取的是上下文map的)
        User user=new User();//root對象
        user.setName("張三");
        Map< String, String> map=new HashMap<>();
        map.put("a", "張三");
        map.put("b", "李四");
        String s="hello";
        String expression="length"//求長度s的長度是5;
        String string="#a.equals(name)";//方法一  獲取name屬性
        String string="#a.equals(getName())";//方法二        
        String string="equals(#root)";//和根對象自己比較 true;
        String string="equals(#this)";//和根對象自己比較 true;
        String string="@java.lang.Runtime@getRuntime().exec(\"calc.exe\")";//靜態的方法 啟動計算器
        <s:property value="@java.lang.Integer@parseInt('10')" />//靜態的方法在jsp頁面上展示
        String expression = "@java.lang.Integer@parseInt(\"10\")";//靜態的方法
        Object value = Ognl.getValue(string, map, user);
        System.err.println(value);

 


免責聲明!

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



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