el表达式与ognl表达式(el失效)
在框架出问题时,可能由于版本兼容等,可以直接官网下载框架源码demo运行,在纯净的环境下测试,,大框架的时候,参考配置也应如此
二者在sturts2中效果一致,el会先从web资源对象(quest,session等)中去,取不到从valuestack中取,
EL表达式原本的查找顺序为:
page,request,session,application,找到返回。
值栈并不在EL表达式的作用范围之内,因此不能使用。但是 struts2对request对象进行了增强,即StrutsRequestWrapper对象,里面重写了getAttribute()方法:在request找不到之后到值栈里面找,因此
EL表达式的查找顺序变为:page,request,valueStack.findValue(),session,application。
值栈:
root:action对象
context:map---》web资源
但是el表达式只需要jsp servlet版本2.4,才可解析el,(el表达式不能解析的标志是原字符串显示,能解析没有值是空白)
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
jstl标签需要jstl,standar.jar
有时在升级的时候由于过滤器的问题导致el获取不到,只有struts标签可以获取
2.3.xx用这个
<!-- Struts2 配置-->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
不能用:
这个只能2.0低版本用
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
还有就是升级的时候sturts时的标签库需要通步改回,2.0改为2.3
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
</struts>