• 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");

  • 相关阅读:
    我的WCF之旅(1):创建一个简单的WCF程序
    网页设计中颜色的搭配
    CSS HACK:全面兼容IE6/IE7/IE8/FF的CSS HACK
    UVa 1326 Jurassic Remains
    UVa 10340 All in All
    UVa 673 Parentheses Balance
    UVa 442 Matrix Chain Multiplication
    UVa 10970 Big Chocolate
    UVa 679 Dropping Balls
    UVa 133 The Dole Queue
  • 原文地址:https://www.cnblogs.com/hr1997/p/5945899.html
Copyright © 2020-2023  润新知