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>


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

  • 相关阅读:
    CSS实现底部固定
    ES6新特性--多行文本
    DataTable转实体
    jQuery插件开发
    页面可编辑
    clearfix--清除浮动
    前端日历控件推荐
    图片Base64编码
    第八周学习进度博客
    人月神话多后感01
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4854642.html
Copyright © 2011-2022 走看看