发布时间:2025-12-10 19:54:43 浏览次数:1
Struts2中EL表达式传统jsp中,例如${person},那么搜索顺序page-request-session-application,依次调用getAttribute(Stringkey)方法Struts2中由于是action转到result视图,所以page一般用不到,但是其request的搜索有变化,先看Request(StrutsRequestWrapper)本身的getAttribute()方法
传统
jsp中,例如${person},那么搜索顺序page-request-session-application,依次调用getAttribute(String key)方法
Struts2中
由于是action转到result视图,所以page一般用不到,但是其request的搜索有变化,先看Request(StrutsRequestWrapper)本身的getAttribute()方法:
“`
public Object getAttribute(String key) {
if (key == null) {
throw new NullPointerException(“You must specify a key value”);
}
if (disableRequestAttributeValueStackLookup || key.startsWith("javax.servlet")) { // don't bother with the standard javax.servlet attributes, we can short-circuit this // see WW-953 and the forums post linked in that issue for more info return super.getAttribute(key); } ActionContext ctx = ActionContext.getContext(); Object attribute = super.getAttribute(key); **if (ctx != null && attribute == null)** { boolean alreadyIn = isTrue((Boolean) ctx.get(REQUEST_WRAPPER_GET_ATTRIBUTE)); // note: we don't let # come through or else a request for // #attr.foo or #request.foo could cause an endless loop if (!alreadyIn && !key.contains("#")) { try { // If not found, then try the ValueStack ctx.put(REQUEST_WRAPPER_GET_ATTRIBUTE, Boolean.TRUE); ValueStack stack = ctx.getValueStack(); if (stack != null) { **attribute = stack.findValue(key);** } } finally { ctx.put(REQUEST_WRAPPER_GET_ATTRIBUTE, Boolean.FALSE); } } } return attribute;} 是否还在为Ide开发工具频繁失效而烦恼,来吧关注以下公众号获取最新激活方式。亲测可用!
【正版授权,激活自己账号】:Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】:官方授权 正版激活 自己使用,支持Jetbrains家族下所有IDE…
``可以看到,在request中搜索不到时,会调用ValueStack的findValue(key)方法。 ${person}
故的搜索顺序如下:request-ValueStack.findValue()-session-application`
(只有request发生变化,其他不变)