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