• struts2 ognl存放数据


    ongl存放数据可以存放在对象栈(root),也可以存放在map中

    一、存放在map中

      1.存放在map中可以分为存放在request、session、application

    	public String testPutDataToValueStack(){
    		/*
    		 * 1.往request,session,application域中存放数据
    		 * 2.观察内存结构
    		 */
    		ServletActionContext.getRequest().setAttribute("request_username", "username");
    		ActionContext.getContext().getSession().put("session_username", "username");
    		ServletActionContext.getServletContext().setAttribute("application_username","username");
    		
    		ValueStack valueStack = ActionContext.getContext().getValueStack();
    		Object object = valueStack.getContext().get("request");
    		System.out.println(object);
    		return SUCCESS;
    	}
    

      

    存放到request、session、application后valuestack的map中的内存结构

      2.存放在map中的其他Entry中

    	public String testStringToMap(){
    		ActionContext.getContext().put("msg", "msg");
    		ValueStack valueStack = ActionContext.getContext().getValueStack();
    		Object object = valueStack.getContext().get("msg");
    		System.out.println(object);
    		return SUCCESS;
    	}
    

      

    二、存放在对象栈中(root)

      1.使用add方法存放

    	public String testObjectToRoot(){
    		Person person=new Person();
    		person.setName("cally");
    		CompoundRoot root = ActionContext.getContext().getValueStack().getRoot();
    		root.add(person);
    		//还一个指定存放位置,放0表示存放在栈顶
    		root.add(0, new Person());
    		
    		//放入对象以后,加入的对象在root中的最后一个,原来有两个,因为root继承了ArrayList,所以就具有List中的属性
    		Object object = root.get(2);
    		System.out.println(((Person)object).getName()+"--"+root.size());
    		return SUCCESS;
    	}
    

      

       2.使用set方法存放

    	public String testObjectToRoot2(){
    		ValueStack valueStack = ActionContext.getContext().getValueStack();
    		CompoundRoot root = valueStack.getRoot();
    		root.set(0, new Person());
    		return SUCCESS;
    	}
    

      

      3.使用push方法进行存放

    	public String testObjectToRoot3(){
    		ValueStack valueStack = ActionContext.getContext().getValueStack();
    		CompoundRoot root = valueStack.getRoot();
    		root.push(new Person());//调用push方法,把对象压入到对象栈顶
    		return SUCCESS;
    	}
    

      

    总结:

    1、可以利用reqeust,session,application把一个数据放入到ValueStack的map中

    2、可以利用ActionContext.getContext().put方法把一个数据放入到map中

    3、可以利用ValueStack.getRoot().add(object)方法把一个对象放入到对象栈中(栈底)

    4、可以利用ValueStack.getRoot().add(index,object)可以把一个对象放入到对象栈中 (index)指定位置

    5、可以利用valueStack的set方法把对象放入到栈顶,放入到栈顶的是一个HashMap

    6、可以利用valueStack的push方法把一个对象放入到对象栈的栈顶

  • 相关阅读:
    人们常说的带宽是什么意思?
    关注前端性能
    单测学习笔记
    基于 Istanbul 生成测试用例覆盖率报告
    如何做高水科研
    Human-like Controllable Image Captioning with Verb-specific Semantic Roles(具有动词语义角色的类人可控图像字幕生成)
    Netty应用程序的全部基本构建模块_netty学习笔记(2)-20210405
    异步和事件驱动_netty学习笔记(1)-20210330
    理解 cosocket(转)
    nginx lua阶段处理流程
  • 原文地址:https://www.cnblogs.com/callyblog/p/7531492.html
Copyright © 2020-2023  润新知