You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by Martin Cooper <ma...@apache.org> on 2003/02/07 02:19:47 UTC

Buglet related to Globals.MAPPING_KEY?

I just noticed something strange that I believe to be a minor bug, but I'm
not sure which is intended to be the correct solution.

RequestProcessor.processMapping() tries to find the ActionMapping for the
current request. Once found, the mapping is stored in a request attribute,
viz Globals.MAPPING_KEY. So far, so good.

Now, further down the line, in RequestUtils.populate(), IFF the request is
a multipart request, the mapping request attribute is removed from the
request. This is the part that's odd.

I believe the original reason for storing the mapping in a request
attribute was so that it could be obtained in populate() when processing a
multipart request, without having to pass it as a parameter all the way
down. In fact, the only code that accesses the attribute is shortly above
the only place that it's removed from the request.

The catch is that it isn't removed for any other type of request. Now,
obviously, we could fix this in one of two ways. We could either have
populate() always remove it, or never remove it. Although the former is
better matched with the original intent of the attribute, it's possible
that people have assumed that it is always available, and written code
with that in mind. In fact, the ConfigHelper class (not used, and marked
as experimental) seems to make this assumption, even within the Struts
code base.

Therefore, to be on the safe side, I plan on removing the call to
removeAttribute() from populate(), thus guaranteeing that the mapping is
available regardless of the type of request being processed.

Comments?

--
Martin Cooper


---------------------------------------------------------------------
To unsubscribe, e-mail: struts-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: struts-dev-help@jakarta.apache.org


Re: Buglet related to Globals.MAPPING_KEY?

Posted by "Craig R. McClanahan" <cr...@apache.org>.

On Thu, 6 Feb 2003, Martin Cooper wrote:

> Date: Thu, 6 Feb 2003 17:19:47 -0800 (PST)
> From: Martin Cooper <ma...@apache.org>
> Reply-To: Struts Developers List <st...@jakarta.apache.org>
> To: struts-dev@jakarta.apache.org
> Subject: Buglet related to Globals.MAPPING_KEY?
>
> I just noticed something strange that I believe to be a minor bug, but I'm
> not sure which is intended to be the correct solution.
>
> RequestProcessor.processMapping() tries to find the ActionMapping for the
> current request. Once found, the mapping is stored in a request attribute,
> viz Globals.MAPPING_KEY. So far, so good.
>
> Now, further down the line, in RequestUtils.populate(), IFF the request is
> a multipart request, the mapping request attribute is removed from the
> request. This is the part that's odd.
>
> I believe the original reason for storing the mapping in a request
> attribute was so that it could be obtained in populate() when processing a
> multipart request, without having to pass it as a parameter all the way
> down. In fact, the only code that accesses the attribute is shortly above
> the only place that it's removed from the request.
>
> The catch is that it isn't removed for any other type of request. Now,
> obviously, we could fix this in one of two ways. We could either have
> populate() always remove it, or never remove it. Although the former is
> better matched with the original intent of the attribute, it's possible
> that people have assumed that it is always available, and written code
> with that in mind. In fact, the ConfigHelper class (not used, and marked
> as experimental) seems to make this assumption, even within the Struts
> code base.
>
> Therefore, to be on the safe side, I plan on removing the call to
> removeAttribute() from populate(), thus guaranteeing that the mapping is
> available regardless of the type of request being processed.
>
> Comments?
>

+1.

We've got a bunch of precedents in the module handling code for passing
request attributes under well-known names.  And, if we ever figure out how
to suport multiple mappings for the controller servlet gracefully, we're
going to want this as a request attribute in order to distinguish which of
the (potentially several) mappings matched on this request.

> --
> Martin Cooper

Craig

---------------------------------------------------------------------
To unsubscribe, e-mail: struts-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: struts-dev-help@jakarta.apache.org