--- 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]