struts2学习笔记 -- day08 Struts2中使用EL表达式
一、Struts2中使用EL表达式
1、jsp中的el表达式取值过程
pageScope --> requestScope --> sessionScope --> applicationScope,
按照以上顺序,从小范围到大范围去找,如果找到,就把数据取出,不继续往下找了。
使用的是pageContext.findAttribute(String name);这个方法。pageContext可以获取其他8个隐式对象,也可以访问其他3个域
public String PageContext(){
/**
* 四大域搜索
*/
public Object findAttribute(String name){
Object value = null;
//1.先去page域中找
value = this.getAttribute(name);
if(value != null){
return value;
}
//2.去请求域中找
value = this.getRequest().getAttribute(name);
if(value != null){
return value;
}
//3.去会话域中找
value = this.getSession().getAttribute(name);
if(value != null){
return value;
}
//4.去应用域中找
value = this.getServletContext().getAttribute(name);
if(value != null){
return value;
}
return value;
}
}
2、el表达式和ognl表达式取值区别
(1)、分别在request域中和动作类中存值
public class UserAction extends ActionSupport {
private String name = "动作类中的name";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/**
* 1、向请求域中放入一个name值
* 2、向动作类中放入一个属性,名为name
* 3、在jsp页面同时使用el表达式和ognl表达式,获取数据
*/
public String value(){
//获取request对象
HttpServletRequest request = ServletActionContext.getRequest();
//存值
request.setAttribute("name", "request域中的name");
return SUCCESS;
}
}
结论:el表达式获取的是request中的数据,ognl表达式获取的是动作类中的数据
(2)、分别向动作类和session域中存值
public class UserAction extends ActionSupport {
private String name = "动作类中的name";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/**
* 1、向session域中放入一个name值
* 2、向动作类中放入一个属性,名为name
* 3、在jsp页面同时使用el表达式和ognl表达式,获取数据
*/
public String value(){
//获取request对象
HttpServletRequest request = ServletActionContext.getRequest();
//存值
request.getSession().setAttribute("name", "session域中的name");
return SUCCESS;
}
}
结论:el表达式获取的是动作类中的数据,ognl表达式获取的也是动作类中的数据,即此处使用el表达式也是获取的值栈中的内容
3、分析struts2对el表达式的改变
以上存取值过程,我们可以得出结论,在struts2中使用el表达式取域对象中的数据时,在request和session二者中有一个出现了跟原生对象不一样
查看底层源码发现struts2中对request的底层进行了封装
结论:在struts2中使用el表达式,从域对象中取值的顺序是
pageScope --> requestScope --> valueStack --> contextMap --> sessionScope --> applicationScope
二、各种符号总结
1、#号
获取大Map中数据,把后面的内容看成是key。
在使用struts2标签,创建Map对象时使用。<s:radio list="#{}">
2、%号
使用%{''}把OGNL表达式强制看成是普通字符串
使用%{}把普通字符串强制看成是OGNL表达式
3、$号
使用EL表达式的标识
在struts的配置文件中使用OGNL表达式
智能推荐
Struts2框架学习笔记_Struts2入门
文章为学习struts的笔记,可供读者参考,有不足之处还望之指出。 参考: POJO与JavaBean的区别 Velocity Velocity官网 FreeMarker XSLT struts2 学习笔记 回顾MVC struts1 webwork struts2 struts2登录项目搭建 StrutsPrepareAndExecuteFilter过滤器 Action与请求参数 Action控...
Struts2学习笔记(1)-Struts2概览
一、Struts2 二、MVC模式 三、Struts2的发展过程 四、Struts2的工作流程 工作流程如下: 五、Struts2的核心文件 web.xml文件(项目部署文件) struts.xml文件 struts.properties文件 注释:文件具体内容介绍参看相关文件描述。...
Struts2学习笔记一(Struts2入门)
这是笔者在学习过程中的知识记录,可能有错误的地方,仅供参考 #Struts2的入门 Struts2的简介 在Javaee开发中,我们一般将整个项目分成表现层,业务层,和持久层,在持久层就是和数据库打交道,之前的Hibernate就是属于这个层的,在表现层我们在没有框架之前是使用jsp+servlet+javabean的MVC设计模式来实现的,Struts2框架就是用来代替之前表现层的开发模式的,或...
EL表达式(JSP)、OGNL表达式(Struts2标签库)介绍及struts2中View与Controller的数据交换
一.EL表达式 EL表达式全名为Expression Language,可用于JSP页面中取值。EL 语法很简单,它最大的特点就是使用上很方便。EL主要的语法结构:${sessionScope.user.sex},所有EL都是以${为起始、以}为结尾的。 1.使用EL表达式取域中的变量 EL 存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变...
Struts2 使用OGNL表达式
使用之前,需要使用到包分别是: javassist-3.11.0.GA.jar 和 ognl-3.0.6.jar 如图: Cat 实体类 Dog 实体类 使用OGNL表达式 效果图: ...
猜你喜欢
Struts2学习笔记三:OGNL表达式学习、Struts2与Ognl表达式的结合原理
文章目录 1. Struts2学习笔记三:OGNL表达式学习、Struts2与Ognl表达式的结合原理 1.1. 什么是OGNL表达式 1.2. 使用OGNL表达式 1.3. Struts2和ONGL表达式的结合原理 1. Struts2学习笔记三:OGNL表达式学习、Struts2与Ognl表达式的结合原理 1.1. 什么是OGNL表达式 OGNL:对象视图导航语言,是比EL表达式有更加丰富的功...
【JUC】004-ReadWriteLock读写锁
目录 一、ReadWriteLock读写锁 1、概述 官方文档介绍: 2、问题引出 代码实现: 运行结果: 问题: 3、使用读写锁 代码实现: 运行结果: 4、分析 一、ReadWriteLock读写锁 1、概述 官方文档介绍: 读可以多个线程读,写只能一个线程写; 2、问题引出 代码实现: 运行结果: 问题: 出现了多线程不安全的问题,我们要实现的是“读可以多个线程读,...
Spring Boot 2.x基础教程:使用 ECharts 绘制各种华丽的数据图表
个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈 通常,这类需求在客户端应用中不太会用到,但是在后端的各种统计分析模块会经常碰到。比如:通过折线图、柱状图、雷达图等可视化形式,更直观的展现和分析经营状况或系统运行情况。这里我们将引入的数据可视化组件库 ECharts来帮助我们完成这样的任务。 ECharts简介 ECharts是百度开源的一个前端组件。它是一个使用 J...
Java数据结构和算法之环形队列
实现原理: 代码实现: 总结: 思路并不太难,主要是理解rear和front相等时歧义的消除。如果对为什么每次移动rear和front都 取模以及判断有效值个数的时候的取模等操作不太理解,就画图看下,你就懂了。...
前端打印页面window.print(),会把页面把A标签里面的href属性也给打印出来解决办法
一、问题描述: 大家都知道用window.print()可以实现调用浏览器的打印功能从而打印系统页面 但是直接用window.print()会把A标签里面的href属性也给打印出来了,如下图所示 二、解决办法 解决办法也很简单,只要加上如下css代码就可以啦 三、最后对自己说的 做梦也没想到自己也能有30个粉丝,有的文章还被人收藏了,嘻嘻嘻,超开心啊! 虽然我...