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>

猜你喜欢

转载自yuhuiblog6338999322098842.iteye.com/blog/2389189