--- Adam Hardy <[EMAIL PROTECTED]> wrote:
> What you're saying is clear except one thing - in JSTL I can access the
> action. And in JSTL, I'm not calling request.getAttribute() - I'm _not_
doing this:
> 
> ${requestScope['myObject']}
> 
> I'm just doing this:
> 
> ${myObject}
> 
> and struts somehow gives me the right info, which to my mind means that
> Struts has put that object into the PageContext already.

I told you precisely what it did: if the request wrapper can't find the
attribute in normal scope, it goes to the stack.

Here is the entire relevant source; it's 36 lines. With comments.

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

Dave


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to