zoukankan      html  css  js  c++  java
  • Struts工作机制图+OGNL+EL+值栈(Map,对象栈)

    struts 值栈  通过get set方法 方便的获取,设置属性值      比如从jsp页面传来的參数。。。从Action设置jsp所要回显的内容


    注意EL表达式,struts2对request进行了封装,所以它的查找顺序 多了一个findvalue() 如上图




    再看以下的代码:

    public class UserAction {

        private String username;

       

        //查看用户的具体信息

        public String detail(){

           username = "张三";

          

           List list = new ArrayList();

           for(int i=0; i<10; i++){

               User user = new User();

               user.setUsername("User"+i);

               list.add(user);

           }

           ActionContext.getContext().put("users", list);

          

           User u = new User();

           u.setUsername("赵毅");

           ActionContext.getContext().getValueStack().push(u);

          

           return "detail";

        }

     

    相应的JSP例如以下:

    1:  <s:property value="username"/> <br/>

    2:  <s:iterator value="#users">

    3:     <s:property value="username"/>

    4:     <s:property value="#root[2].username"/><br/>

    5:  </s:iterator>

    6:  <s:property value="username"/>

    7:  <s:property value="#root[1].username"/> <!-- 张三 -->

     

    依据刚才的演示样例,我们知道,第1行的username是“赵毅”(由于JSP在运行这行代码的时候,CompoundRoot中有两个元素:第0个是“user对象赵毅”,第1个是“userAction对象张三”),因此第1行的username将取出CompoundRoot中第0个元素的username属性:赵毅

     

    第2行代码是iterator标签,仅仅定义了一个value属性,iterator标签将循环訪问users这个List中的User对象,并把当前循环的user对象压入到CompoundRoot中!所以,在第3行和第4行代码被运行的时候,CompoundRoot中总共同拥有3个元素:第0个元素是被iterator标签压入的当前循环的user对象;第1个元素是“user对象赵毅”;第2个元素是“userAction对象张三”,因此第3行代码的运行结果就是输出“UserX”,即当前循环的user对象的username属性!iterator标签将会依次取出List中的user对象,并不断压入/弹出user对象(每次循环,都将运行一遍压入/弹出)。而第4行代码取第2个元素的username属性,即userAction对象的username属性:张三。

     

    第5行代码运行完毕之后,在CompoundRoot中将剩下2个元素,与第2行代码被运行之前一样。所以,第6行代码的输出和第1行代码的输出结果是一样的,而第7行代码将取出userAction对象的username属性:张三


  • 相关阅读:
    java积累
    mybatis
    Netty
    springcloud相关笔记整理
    java基础总结笔记
    读书笔记-RocketMQ实战与原理解析
    读书笔记-kafka权威指南
    读书笔记-rabbitmq实战指南
    Centos 部署ServiceDesk
    IDEA将新建项目上传至GitLab
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/3961678.html
Copyright © 2011-2022 走看看