Pierre Thibaudeau wrote:
Earlier in this conversation, Jeromy proposed two ways of accessing
the current URL (or URI), one through EL and the other through OGNL

${pageContext.request.requestURI}
<s:property 
value="%{#context['com.opensymphony.xwork2.dispatcher.HttpServletRequest'].requestURI}"/>

That works great until (it seems) Tiles2 gets in the picture.  By that
point, the address returned is that of the Tiles layout (with
extension ".jsp") and not the logical address of the request.  (I
haven't made a systematic study of the exact conditions for this
phenomenon to occur.)

It seems to me that, having access to the current (logical) URL (the
one that generated this request) is a fairly common need.  Has anyone
come up with another way of getting hold of it?

I was hoping you wouldn't encounter that little problem. When your container forwards to a JSP, the requestURI is now the JSP rather than the original URI.

After a forward, the requestURI is now available in the request map:

#request['javax.servlet.forward.request_uri']

But of course, that won't be set if there wasn't a forward, so you can't always use that.

As logic's involved, my solution was to create a custom tag with the following code extract. I never understood why the requestURI was never readily available in the action's context though. However I rarely need it and most pages don't require it.

Snippet:
           StringBuilder uri = new StringBuilder();
RequestMap requestMap = (RequestMap) stack.getContext().get("request"); String forwardURI = (String) requestMap.get("javax.servlet.forward.request_uri"); if ((forwardURI != null) && (forwardURI.length() > 0)) { uri.append(forwardURI); } else { uri.append(request.getRequestURI()); }


regards,
Jeromy Evans


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

Reply via email to