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表达式



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值