Struts2中EL表达式

来源:互联网 发布:邦银金租 知乎 编辑:程序博客网 时间:2024/05/21 14:47

传统
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;}

``可以看到,在request中搜索不到时,会调用ValueStack的findValue(key)方法。
${person}的搜索顺序如下:request-ValueStack.findValue()-session-application`
(只有request发生变化,其他不变)

原创粉丝点击