zoukankan      html  css  js  c++  java
  • 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);
  • 相关阅读:
    用python写爬虫
    ASM上的备份集如何转移到文件系统中
    Web基础知识和技术
    java调用存储过程超时及DBCP参数配置说明
    android JNI--- 搭建环境(1)
    android jni——helloworld
    程序设计的预防与诊断
    [置顶] 某大型银行深化系统技术方案之十七:技术架构
    Ubuntu12.04 Eclipse 提示框背景色修改
    window与linux互相拷贝文件
  • 原文地址:https://www.cnblogs.com/liushisaonian/p/6953059.html
Copyright © 2011-2022 走看看