因为回答百度知道的一个问题,仔细查看了《Struts2 In Action》,深入细致的看了 “数据转移OGNL 和 构建视图-标签”,很多东西才恍然大悟。

一直觉得国外写的书很浮,不具有操作性,但其实,Coding多了,才发现国外的书写的深刻、清晰、能传道解惑。

一、主要收获

1. Struts2 框架的数据流入和流出

使用 Struts2 标签时,所有非字符串属性都被当作 OGNL表达式进行解析。

使用  %{expression} 语法可以强制将字符串属性当作 OGNL表达式解析。

2. 页面的多值提交

3. 虚拟对象 ValueStack

使用 params拦截器,将请求参数设置到 ValueStack 公开属性中,动作 Action也被设置到 ValueStack 中。

ValueStack 中没有基础结构的对象(如Servlet API 或者 Struts2 的对象)。动作 Action 在 ValueStack 上是因为它作为

业务数据(请求所提交的数据)的承载者。

ValueStatck 有一个为妙的地方,当OGNL表达式根据 ValueStack解析时, 它装作一个对象。这个虚拟对象包含它自身

包含的所有对象的所有属性。如果相同属性存在,则栈下面的属性会被上面的同名属性覆盖1

4. ActionContext

Struts2 框架的一个核心对象,动作Action的上下文。AC 包含 动作Action 相关的所有重要的数据对象。

它包括6个对象:ValueStack,  parameters, application, session, attr, request。

其中,request 和 session, application 是 Sevrlet API 的 request, session, application 的翻版(映射或者说包装)。

所以

使用 OGNL 获取 ActionContext 中的 原生session对象中的值的方法是
#session['user'] 或者 #session.user
访问OGNL上下文和Action上下文,#相当于ActionContext.getContext();下表有几个ActionContext中有用的属性: 
parameters 包含当前HTTP请求参数的Map
#parameters.id[0] === request.getParameterValues("id").get(0);
request 包含当前HttpServletRequest的属性(attribute)的Map
#request.userName === request.getAttribute("userName")
session 包含当前HttpSession的属性(attribute)的Map
#session.userName === session.getAttribute("userName")
application 类似 另外注意区分 EL表达式、 JSTL 标签 和 OGNL 表达式

时间有限,摘录部分重点:

Strust2接收到一个请求时,它会立即创建一个 ActionContext、一个ValueStack 和一个动作对象 Action。作为数据承载者,动作Action 被马上放到 ValueStack 中,以便框架可以通过 OGNL 访问它的属性。

1:

当Action 内 含有 name 属性和一个 User 对象属性,并且刚好 User 类也有个 name 属性,根据 动作Action会先被放入ValueStack

,属性对象后放入的顺序,动作Action 的 name 属性将不会被框架自动的 赋值,换句话说,就会被永远无法访问到了。

(但其实有 特定标签put 可以解决这个问题,实际中也很少出现这个问题,不知道为何?)

参考《Struts2 In Action》 P112 ,Struts2 标签概要。

Struts2 In Action笔记_页面到动作的数据流入和流出的更多相关文章

  1. Struts2 后台action接收 jsp页面中checkbox中的值

    如前端页面jsp中的标签为: <form action="myurl"> <input type="checkbox" name=" ...

  2. Struts2配置详解_配置Action

    Struts2的核心功能是action,对于开发人员来说,使用Struts2主要就是编写action,action类通常都要实现com.opensymphony.xwork2.Action接口,并实现 ...

  3. jap页面获取struts2中action中变量的值

    在jsp页面中可以通过ONGL表达式获取struts2中action处理后的变量的值,这是因为每一个action在初始化后都会放到strackcontext中,可以通过ONGL表达式取到值. 注意要在 ...

  4. 访问struts2的action页面出现白板问题

    访问struts2的action页面出现白板问题 故需要设置拦截此action的拦截栈, <bean id="authenticationInterceptor" class ...

  5. struts2视频学习笔记 07-08(为Action的属性注入值,指定需要Struts 2处理的请求后缀,常用常量)

    课时7 为Action的属性注入值(增加灵活性,适用于经常更改的参数) Struts2为Action中的属性提供了依赖注入功能,在struts2的配置文件中,我们可以很方便地为Action中的属性注入 ...

  6. Struts2权威指南笔记

    Struts2权威指南笔记 1.mvc特点包括: ① 多个视图可以对应一个模型 ② 模型返回的数据与显示逻辑分离 ③ 应用层被分隔为三层,降低了各层之间的耦合,提供了应用的可扩展性 ④ 控制层的概念也 ...

  7. Struts2知识点学习笔记

    写给自己的话 好记性不如烂笔头,不可能说看了一遍视频就可以完全掌握的.留下这篇笔记,便于今后的复习吧. 1. 访问ServletAPI 访问ServletAPI(response,request,)的 ...

  8. struts2马士兵笔记

    Struts2 学习笔记 目录 01 Struts2-Action 一.         Struts作用: 二.         搭建Struts2的运行环境: 三.         Namespa ...

  9. (四)Struts2的Action(深入讲解版)

    Struts2的Action 开发者需要提供大量的Action,并在struts.xml中配置Action.Action类里包含了对用户请求的处理逻辑,因为我们也称Action为业务控制器. 一.编写 ...

随机推荐

  1. NoSuchMethodError idea解决jar包冲突

    报NoSuchMethodError(使用spring boot框架idea)一般是jar包冲突 Exception in thread"main" java.lang.NoSuc ...

  2. Web攻击技术---OWASP top

    整理OWASP top 10 部分内容,方便日后查看.想深入了解的,请移步参考中的网站. OWASP Top 10 注入 将不受信任的数据作为命令或者查询的一部分发送到解析器时,会发生诸如SQL注入. ...

  3. Django 03 模板路径、模板变量、常用的过滤器

    Django 03 模板路径.模板变量.常用的过滤器 一.模板路径 #1.在每个app下面添加一个templates文件 #2.在项目views.py里面第33行INSTALLED_APPS里面添加上 ...

  4. UVALive - 6440

    题目链接:https://vjudge.net/contest/241341#problem/G Indonesia, as well as some neighboring Southeast As ...

  5. jdbc 操作步骤详解

    package com.itheima.test; import java.sql.Connection; import java.sql.DriverManager; import java.sql ...

  6. pat1081. Rational Sum (20)

    1081. Rational Sum (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Given N ...

  7. .net笔试题一(简答题)

    1. 简述 private. protected. public. internal 修饰符的访问权限答:private : 私有成员, 在类的内部才可以访问. protected : 保护成员,该类 ...

  8. 【踩坑】mysql LIMIT 与 ORDER BY位置问题

    今天在重做iblog项目后台时,当测试功能,发现后台报错,位置在 MyBatis 向 MySQL 取数据时的语法问题,如下: SELECT * FROM article WHERE authorID ...

  9. 日常bug整理--xxtz

    2017-12-12 建SQLite数据库表时,遇到外键关联报错:foreign key mismatch 解决:发现是个粗心问题,关联的外键没有作为主键,原因是关联的外键由INT改为varchar字 ...

  10. jQuerychicun

    jQuery 尺寸 方法 jQuery 提供多个处理尺寸的重要方法: width() height() innerWidth() innerHeight() outerWidth() outerHei ...