zoukankan      html  css  js  c++  java
  • OGNL

    一、OGNL全称是Object Graph Navigation Language,即对象导航图语言

     OGNL在框架中主要做两件事情:表达式语言和类型转换器

    OGNL在框架中的作用以及数据的流入流出:


    二、ValueStack值栈

    定义:是内存中的一块空间,栈和堆之外的空间,它具有栈的特征,可以存放多个对象,如果存放多个对象,他们是按照先后顺序压入堆栈的。框架在处理每个请求时,都会创建该请求对应的运行环境,这时会创建值栈和请求对应的Action实例,并将Action实例压入值栈中  


     三、实现思路

    可通过单列(Root)、双列(Context)集合获取ValueStack

    单列集合:

    创建Action类继承自ActionSupport,首先通过ServletActionContext获取到request对象,其次创建UserInfo对象,通过ValueStack对象的getRoot方法拿到UserInfo对象info

    复制代码
    public class ValueStackAction extends ActionSupport {
        @Override
        public String execute() throws Exception {
    
            HttpServletRequest request = ServletActionContext.getRequest();
            ValueStack vs = (ValueStack) request.getAttribute("struts.valueStack");
    
            UserInfo info = new UserInfo();
            info.setUsername("呵呵");
            info.setPassword("12345");
                
            vs.getRoot().add(info);
            
            return SUCCESS;
        }
    复制代码

    index.jsp页面进行取数据:

    复制代码
    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <%@ taglib uri="/struts-tags" prefix="s" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP 'index.jsp' starting page</title>
        
      </head>
      
      <body>
        valueStack
          <s:property value="username"/> 
       
        <s:debug></s:debug>
      </body>
    </html>
    复制代码


    双列集合:

     

    index.jsp页面:需注意的是双列集合通过#获取数据

     

    使用ognl表达式:

    1)“#”符号有三种用途

    a、访问非根对象(struts中值栈为根对象),eg:OGNL上下文和Action上下文,#相当于ActionContext.getContext();下表有几个ActionContext中有用的属性:

    名称   作用域 

    eg:

    1-1)parameters :包含当前HTTP请求参数的Map

    #parameters.id[0]=>作用相当于request.getParameter("id")

    1-2)request:包含当前HttpServletRequest的属性(attribute)的Map

    #request.userName=>作用相当于request.getAttribute("userName");

    1-3)session:包含当前HttpSession属性(attribute)的Map

    #session.userName=>session.getAttribute("userName");

    1-4)application:包含当前应用的ServletContext的属性(attribute)的Map

    #application.userName=>application.getAttribute("userName");


    时间是一切财富中最宝贵的财富。 —— 德奥弗拉斯多

  • 相关阅读:
    1105 Spiral Matrix (25分)(蛇形填数)
    1104 Sum of Number Segments (20分)(long double)
    1026 Table Tennis (30分)(模拟)
    1091 Acute Stroke (30分)(bfs,连通块个数统计)
    1095 Cars on Campus (30分)(排序)
    1098 Insertion or Heap Sort (25分)(堆排序和插入排序)
    堆以及堆排序详解
    1089 Insert or Merge (25分)
    1088 Rational Arithmetic (20分)(模拟)
    1086 Tree Traversals Again (25分)(树的重构与遍历)
  • 原文地址:https://www.cnblogs.com/hq-123/p/5960045.html
Copyright © 2011-2022 走看看