欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

el表达式为什么可以取到struts值栈中的值

程序员文章站 2022-04-20 19:00:45
...

 

el表达式为什么可以取到struts值栈中的值

 

1,el表达式自身就是会从request,session,application,pagecontext获取

 

 

2,由于在StrutsPrepareAndExecuteFilter中包装了request( request = prepare.wrapRequest(request);)StrutsRequestWrapper,

这个request又重写了getAttribute方法:

 

这个方法实现了从原来的requset,session等获取,然后获取不到再从值栈获取

 

public Object getAttribute(String s) {

        if (s != null && s.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(s);

        }

 

        ActionContext ctx = ActionContext.getContext();

        Object attribute = super.getAttribute(s);

        if (ctx != null) {

            if (attribute == null) {

                boolean alreadyIn = false;

                Boolean b = (Boolean) ctx.get("__requestWrapper.getAttribute");

                if (b != null) {

                    alreadyIn = b.booleanValue();

                }

    

                // note: we don't let # come through or else a request for

                // #attr.foo or #request.foo could cause an endless loop

                if (!alreadyIn && s.indexOf("#") == -1) {

                    try {

                        // If not found, then try the ValueStack

                        ctx.put("__requestWrapper.getAttribute", Boolean.TRUE);

                        ValueStack stack = ctx.getValueStack();

                        if (stack != null) {

                            attribute = stack.findValue(s);

                        }

                    } finally {

                        ctx.put("__requestWrapper.getAttribute", Boolean.FALSE);

                    }

                }

            }

        }

        return attribute;

    }

 

相关标签: struts el表达式