zoukankan      html  css  js  c++  java
  • 2018.11.25 struts2与OGNL表达式的结合(高级)

    两者的结合原理


    底层源码分析

    栈原理 先进后出

    我们的valuestack其实是一个接口

    在实现类中有这个参数

    CompoundRoot的类继承的是ArrayList,具体实现弹栈和压栈的方法具体实现原理

    在OgnlValueStack实现类中分别有弹栈和压栈的方法

    查看值栈中两部分的内容 (Root部分和context) 使用DEBUG标签

    页面需要倒入标签库

    输入地址栏回车出现一个Deug的链接,点击即可

    Root部分

    默认情况下,栈中放置当前访问的Action对象

    Context部分

    Context部分就是ActionContext数据中心


    struts2与ognl结合体现

    地址栏

    控制台显示null值


    问题分析

    由拦截器交给ognl,先走完20个拦截器在到ognl,在Action中才压栈

    到底层分析

    默认走的拦截器

    要在这之前完成赋值

    准备工作在这个拦截器的时候完成实现

    在struts-default.xml 中找到这个注册拦截器的类 进去查看PrepareInterceptor类

    将action类强转为Preparable接口 执行parpare方法

    so在我们的Demo2Action中修改代码

    在控制台能打印出来我们能的用户名了


    上面是我们的第一种解决方案,下面是我们的第二种实现方案(人性化的操作)

    实现模型驱动接口,获得参数属性

    地址栏输入 http://localhost:8080/StrutsDay03/Demo2Action2

    同样的我们继续来源码分析ModelDriven 的实现思路 这些事默认的栈需要走的拦截器

    找到了具体的实现类

    分析实现的方法
    ValueStack stack = invocation.getStack(); 值栈ValueStack也是通过invocation来获取的,在调用push方法把对象压入栈顶

  • 相关阅读:
    FMDB 使用方法
    Masonry
    iOS请求服务器数据去空NSNull
    NSProgress
    根据图标名称动态设置TreeList图标
    控制显示行头列(Indicator)
    窗体内元素遍历-通用方法(DevExpress 中BarManager的遍历)
    BarManager相关使用
    C# 枚举变量
    dev TreeList 获取可视区域节点方法
  • 原文地址:https://www.cnblogs.com/qichunlin/p/10014693.html
Copyright © 2011-2022 走看看