关于struts2 <s:action ⼀>标签的使用问题

2025-12-16 23:06:38
推荐回答(1个)
回答1:

request里的东西,都同时也放在了valueStack的顶层。

以前是request、response、context等这些是基本默认对象作为根值对象,在栈的顶层,你可以直接调用,比如request.什么什么。

现在Sturts2,顶层换了。比如你的request里先前存了一个叫name的变量,那么OGNL中,你这样就可以:
这样就取到值了。
如果是普通HTML标签,这样:
这样取值。
我觉得它俩反过来就不好用,也不知道是不是我配置的问题。

那么假如你需要用request或response了,实际上调用:
ServletActionContext.getRequest();或
ServletActionContext.getResponse();
现在OGNL用井号#代替了上面,即#request就可以取到了。

又比如你自己一个对象addr出来,那么这个对象跟默认的那几个对象,即request、response等等是在一个层次上的,对于以前的jsp,是可以直接调用到的,但Struts2不行了。所以:
#addr

%{addr}或${addr}
是两个东西,后者是request里的,当然人为也可能让它们都指同一个东西。