zoukankan      html  css  js  c++  java
  • 05章 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");

  • 相关阅读:
    pycharm 安装第三方库报错:AttributeError: 'module' object has no attribute 'main'
    CentOS7.x 设置显示vi/vim行号
    centos下使用yum 安装pip
    kubelet服务启动失败,错误代码255
    服务器时间设置
    解决umount.nfs: /data: device is busy 问题
    vim修改权限: E45: 已设定选项 'readonly' (请加 ! 强制执行)
    Postgresql 截取字符串
    《算法竞赛进阶指南》0x31质数 阶乘分解质因数
    《算法竞赛进阶指南》0x31质数 POJ2689 Prime Distance
  • 原文地址:https://www.cnblogs.com/WJ-163/p/5945773.html
Copyright © 2011-2022 走看看