This works for me
public class ServletRedirectResultExt extends ServletRedirectResult {
private static final Log log =
LogFactory.getLog(ServletRedirectResult.class);
protected void doExecute(String finalLocation, ActionInvocation
invocation) throws Exception {
ActionContext ctx = invocation.getInvocationContext();
HttpServletRequest request = (HttpServletRequest)
ctx.get(ServletActionContext.HTTP_REQUEST);
HttpServletResponse response = (HttpServletResponse)
ctx.get(ServletActionContext.HTTP_RESPONSE);
if (isPathUrl(finalLocation)) {
if (!finalLocation.startsWith("/")) {
ActionMapping mapping = actionMapper.getMapping(
request,
Dispatcher.getInstance().getConfigurationManager());
String namespace = null;
if (mapping != null) {
namespace = mapping.getNamespace();
}
if ((namespace != null) && (namespace.length() > 0) &&
(!"/".equals(namespace))) {
finalLocation = namespace + "/" + finalLocation;
} else {
finalLocation = "/" + finalLocation;
}
}
// if the URL's are relative to the servlet context, append the
servlet context path
if (prependServletContext && (request.getContextPath() != null)
&& (request.getContextPath().length() > 0)) {
finalLocation = request.getContextPath() + finalLocation;
}
finalLocation = response.encodeRedirectURL(finalLocation);
}
if (log.isDebugEnabled()) {
log.debug("Redirecting to finalLocation " + finalLocation);
}
response.sendRedirect(finalLocation);
}
private boolean isPathUrl(String finalLocation) {
try {
new URL(finalLocation);
return false;
} catch (MalformedURLException ex) {
return true;
}
}
}
On Fri, Dec 12, 2008 at 7:35 AM, Luis Gervaso <[email protected]>wrote:
> Hello
>
> *private* *static* *boolean* isPathUrl(String url) {
> *// filter out "http:", "https:", "mailto:", "file:", "ftp:"
> * *// since the only valid places for : in URL's is before the path
> specification
> * *// either before the port, or after the protocol
> * *return* (url.indexOf(*':'*) == -1);
> }
>
> I'm currently using jcr (jackrabbit) as backend, and the path *parameter* of
> the nodes can be ns:name
>
> so my urls are http://.../resourcesManager.action?path=/jcr:system/other/stuff
>
> The redirect removes the context path,
>
> maybe a workaround solution use de URL class
>
> When you construct a URL object, Java looks for a
>
> protocol handler that understands the protocol part of the URL such
> as "http" or "mailto". If no such handler is found, the constructor
> throws a MalformedURLException.
>
> Hope this helps
>
>
> --
> -------------------------------------------
> Luis Alberto Gervaso Martin
> Java EE Architect & Instructor
> C/ Cuenca 4A, 2ºB
> Getafe (Madrid)
> SPAIN
> mobile: (+34) 627983344
> [email protected]
>
--
-------------------------------------------
Luis Alberto Gervaso Martin
Java EE Architect & Instructor
C/ Cuenca 4A, 2ºB
Getafe (Madrid)
SPAIN
mobile: (+34) 627983344
[email protected]