Struts2中Action转发到jsp页面后,Action的值用EL表达式取总是为空

时间:2022-01-02 17:37:41
Struts2中Action转发到jsp页面后,Action的属性值用EL表达式取总是为空,循环遍历用<c:foreach>标签不执行循环,用 <s:iterator>正常了,怎么回事啊,总之一用el表达式,取值就为空

17 个解决方案

#1


<s:iterator>会自动分范围查找对应变量,c:foreach不会

#2


第二行加入   <%@ page isELIgnored="false" %>   试试

#3


<c:foreach>要导入jstl.jar和几个tld,而且页面还要用taglib引入。。如果不行,那就干脆用struts2标签就够了啊。。



#4


可能是导包出现问题了吧,正常来说,<c:foreach>和<s:iterator>是可以相互替换的。

#5


Struts2是有个值栈的,所有的东西,session、request。。。。。等等都是被压到值栈中,从值栈中取东西好像要加“#”,并且有时候值栈中的某些东西根本就不是那个键了。有个方法可以显示在页面上显示值栈。
但是我忘了。。。

#6


引用 2 楼 door1983 的回复:
第二行加入   <%@ page isELIgnored="false" %>   试试

EL表达式没有禁用,在jsp用<%  %>声明的变量用EL又取得出来

#7


你的拦截器interceptor这个的顺序可能错误了
看看你自己写过默认的拦截器没有
要吧defaultStack这个拦截器放在最前面,让他最先执行
而且如果你用了默认的拦截器,你又在某个action里面定义你自定义的其他拦截器,那你默认的拦截器便会失效!等于是struts2的核心你都没有了!

如果你定义了默认的有想在某个action里用到你自定义的拦截器,又不想struts的其他拦截器失效,那就在要用的那个action里把默认的拦截器放在上面

建议你把自定义的拦截器先不要试试,或者全部的拦截器都不要试试,看看能不能获到值,如果可以说明是拦截器除了问题!

#8


引用 7 楼 oyxm0 的回复:
你的拦截器interceptor这个的顺序可能错误了
看看你自己写过默认的拦截器没有
要吧defaultStack这个拦截器放在最前面,让他最先执行
而且如果你用了默认的拦截器,你又在某个action里面定义你自定义的其他拦截器,那你默认的拦截器便会失效!等于是struts2的核心你都没有了!

如果你定义了默认的有想在某个action里用到你自定义的拦截器,又不想struts的其他拦截……


不对吧?默认拦截器是得放在后面才行吧。不然会被你自己写的拦截器给覆盖掉,默认拦截器应该是放在最后面的

#9


引用 7 楼 oyxm0 的回复:
你的拦截器interceptor这个的顺序可能错误了
看看你自己写过默认的拦截器没有
要吧defaultStack这个拦截器放在最前面,让他最先执行
而且如果你用了默认的拦截器,你又在某个action里面定义你自定义的其他拦截器,那你默认的拦截器便会失效!等于是struts2的核心你都没有了!

如果你定义了默认的有想在某个action里用到你自定义的拦截器,又不想struts的其他拦……

我都没用自定义拦截器啊

#10


用s标签都可以用,但是一旦与EL沾边,就取值为空,奇怪得很,找了很久,代码似乎没错啊!

#11


看看你的具体代码

注:如果是struts2.1以后的版本,就不支持EL表达式了啊。建议不用。

#12


如果标签是对这呢,就是标签没有导入包

#13


应该是标签的标签库没有导入吧<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

#14


直接用struts2标签不是挺好吗。

#15


引用 11 楼 redlotus_lyn 的回复:
看看你的具体代码

注:如果是struts2.1以后的版本,就不支持EL表达式了啊。建议不用。

就是2.1的

#16


导包<%@ taglib prefix="c" uri=" http://java.sun.com/jsp/jstl/core" %>就ok了

#17


用<s:property>避过了,可能是导Struts2的jar包出问题了,又做了一份,代码没变EL正常的

#1


<s:iterator>会自动分范围查找对应变量,c:foreach不会

#2


第二行加入   <%@ page isELIgnored="false" %>   试试

#3


<c:foreach>要导入jstl.jar和几个tld,而且页面还要用taglib引入。。如果不行,那就干脆用struts2标签就够了啊。。



#4


可能是导包出现问题了吧,正常来说,<c:foreach>和<s:iterator>是可以相互替换的。

#5


Struts2是有个值栈的,所有的东西,session、request。。。。。等等都是被压到值栈中,从值栈中取东西好像要加“#”,并且有时候值栈中的某些东西根本就不是那个键了。有个方法可以显示在页面上显示值栈。
但是我忘了。。。

#6


引用 2 楼 door1983 的回复:
第二行加入   <%@ page isELIgnored="false" %>   试试

EL表达式没有禁用,在jsp用<%  %>声明的变量用EL又取得出来

#7


你的拦截器interceptor这个的顺序可能错误了
看看你自己写过默认的拦截器没有
要吧defaultStack这个拦截器放在最前面,让他最先执行
而且如果你用了默认的拦截器,你又在某个action里面定义你自定义的其他拦截器,那你默认的拦截器便会失效!等于是struts2的核心你都没有了!

如果你定义了默认的有想在某个action里用到你自定义的拦截器,又不想struts的其他拦截器失效,那就在要用的那个action里把默认的拦截器放在上面

建议你把自定义的拦截器先不要试试,或者全部的拦截器都不要试试,看看能不能获到值,如果可以说明是拦截器除了问题!

#8


引用 7 楼 oyxm0 的回复:
你的拦截器interceptor这个的顺序可能错误了
看看你自己写过默认的拦截器没有
要吧defaultStack这个拦截器放在最前面,让他最先执行
而且如果你用了默认的拦截器,你又在某个action里面定义你自定义的其他拦截器,那你默认的拦截器便会失效!等于是struts2的核心你都没有了!

如果你定义了默认的有想在某个action里用到你自定义的拦截器,又不想struts的其他拦截……


不对吧?默认拦截器是得放在后面才行吧。不然会被你自己写的拦截器给覆盖掉,默认拦截器应该是放在最后面的

#9


引用 7 楼 oyxm0 的回复:
你的拦截器interceptor这个的顺序可能错误了
看看你自己写过默认的拦截器没有
要吧defaultStack这个拦截器放在最前面,让他最先执行
而且如果你用了默认的拦截器,你又在某个action里面定义你自定义的其他拦截器,那你默认的拦截器便会失效!等于是struts2的核心你都没有了!

如果你定义了默认的有想在某个action里用到你自定义的拦截器,又不想struts的其他拦……

我都没用自定义拦截器啊

#10


用s标签都可以用,但是一旦与EL沾边,就取值为空,奇怪得很,找了很久,代码似乎没错啊!

#11


看看你的具体代码

注:如果是struts2.1以后的版本,就不支持EL表达式了啊。建议不用。

#12


如果标签是对这呢,就是标签没有导入包

#13


应该是标签的标签库没有导入吧<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

#14


直接用struts2标签不是挺好吗。

#15


引用 11 楼 redlotus_lyn 的回复:
看看你的具体代码

注:如果是struts2.1以后的版本,就不支持EL表达式了啊。建议不用。

就是2.1的

#16


导包<%@ taglib prefix="c" uri=" http://java.sun.com/jsp/jstl/core" %>就ok了

#17


用<s:property>避过了,可能是导Struts2的jar包出问题了,又做了一份,代码没变EL正常的