zoukankan      html  css  js  c++  java
  • Struts的ONGL

    1.什么是OGNL
    OGNL它是Object Graphic Navigation Language(对象图导航语言)缩写,

       它是一个开源项目。

    Struts2框架使用OGNL作为默认的表达式语言。
    功能比EL强的N倍.
    OGNL只不过一种表达式语言而已,使用它必须结合Struts2的标签.

       解说OGNL比先了解ValueStack(值栈),Struts2核心.

    2.值栈是相应每个请求对象的轻量级的内存数据中心。
    (把一次请求相关的所有数据所有保存到ValueStack对象).
       (1).ValueStack实际是一个接口,在Struts2中利用OGNL时,实际上使用的是实现了该接口的OgnlValueStack类,这个类是Struts2利用OGNL的基础。
       (2).ValueStack贯穿整个Action的生命周期:每一个Action类的实例都拥有一个ValueStack对象。 ValueStack相当于数据的中转站,在当中保存当前Action 对象和其它相关对象信息。
       (3).Struts2框架把ValueStack对象保存在名为“struts.valueStack”的request属性中。


       request.setAttribute("struts.valueStack",vs);
    3.ValueStack内部结构
    ValueStack中存两个属性:
      1.root:根, 类型 CompoundRoot,其本质是ArrayList.

      2.context:上下文,类型是Map

      结构例如以下图:


      怎样去訪问ValueStack中的数据:
      <s:property value=""/>
      若訪问的是root里的数据,就直接訪问. <s:property value="属性名"/>
      若訪问的是context里的数据,得使用.#<s:property value="#属性名"/>


    4.怎样获得值栈对象
      方式1:
          ValueStack vs = (ValueStack)requets.getAttribute("struts.valueStack");
      方式2:
          ValueStack vs = ActionContext.getContext().getValueStack();

    5.向值栈保存数据(主要针对root对象)4种方式:
    ①.将数据保存root的索引0位置,放置到第一个元素 ArrayList.add(0,element);
    valueStack.push("一叶扁舟");数据压栈
    ②.在值栈创建參数map,将数据保存到map中
     valueStack.set("age", "22");

    一般的,我们仅仅要在Action类中提供属性的訪问方法(getXxx). 就会被自己主动压到栈顶.
    class xxAction{}
    private User user;
    //属性user
    public User getUser() {
    return user;
    }
    }
    <s:property value="user.name"/>
    <s:property value="user.age"/>
    Struts2支持使用EL表达式来获取信息. Strutss又一次改写了EL获取属性的代码

    6.向值栈保存数据(主要针对contextt对象)两种方式:
       ActionContext.getContext().getContextMap().put("name", "一叶扁舟");
     //简单方式

    ActionContext.getContext().put("name", "无悔");

    ValueStack在开发中的应用
    主流应用 : 值栈 解决 Action 向 JSP 传递 数据问题 
    Action 向JSP 传递数据处理结果 。结果数据有两种形式 
    1) 消息 String类型数据
    super.addFieldError("msg", "字段错误信息");
    super.addActionError("Action全局错误信息");
    super.addActionMessage("Action的消息信息");

    fieldError 针对某一个字段错误信息 (经常使用于表单校验)、
    actionError (普通错误信息。不针对某一个字段 登陆失败)、 
    actionMessage 通用消息

    在jsp中使用 struts2提供标签 显示消息信息
    <s:fielderror fieldName="msg"/>
    <s:actionerror/>
    <s:actionmessage/>
    2) 数据 (复杂类型数据)
    <s:iterator />标签
    若数据存储在root:
    public List<User> getList() {
    return list;
    }

    <s:iterator value="list" >
    <s:property value="name"/>   <s:property value="email"/> <s:property value="age"/><br/>
    </s:iterator>
    该标签在迭代的时候,会吧每个迭代对象压入栈顶.


    若数据存储在context:
    ActionContext.getContext().put("userList", list);
    <s:iterator value="#userList" >
    <s:property value="name"/>   <s:property value="email"/> <s:property value="age"/><br/>
    </s:iterator>


    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    Representation Data in OpenCascade BRep
    Render OpenCascade Geometry Surfaces in OpenSceneGraph
    Render OpenCascade Geometry Curves in OpenSceneGraph
    OpenCascade Shape Representation in OpenSceneGraph
    Geometry Surface of OpenCascade BRep
    Geometry Curve of OpenCascade BRep
    Tyvj2017清北冬令营入学测试
    Spfa算法模板
    洛谷1016 旅行家的预算
    洛谷1290 欧几里得的游戏
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4854642.html
Copyright © 2011-2022 走看看