[ http://issues.apache.org/jira/browse/VELTOOLS-16?page=all ] Christopher Schultz closed VELTOOLS-16: ---------------------------------------
I noticed that this bug wasn't CLOSED. I was the original reporter, so I'll go ahead and CLOSE it. > StrutsLinkTool.setForward requires trip through Struts ActionServlet > -------------------------------------------------------------------- > > Key: VELTOOLS-16 > URL: http://issues.apache.org/jira/browse/VELTOOLS-16 > Project: VelocityTools > Type: Bug > Environment: Operating System: other > Platform: Other > Reporter: Christopher Schultz > Attachments: forwardurl.diff > > When using StrutsLinkTool.setForward, if your request does not first go > through > the Struts ActionServlet (say, by being processed by an action, then forwarded > to a Velocity template), you get the following exception: > java.lang.NullPointerException > at > org.apache.struts.util.RequestUtils.forwardURL(RequestUtils.java:1534) > at > org.apache.velocity.tools.struts.StrutsUtils.getForwardURL(StrutsUtils.java:597) > at > org.apache.velocity.tools.struts.StrutsLinkTool.setForward(StrutsLinkTool.java:82) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > This exception does *not* occur if you have an action forward in > struts-config.xml which forwards to a Velocity template. This exception is > also > not thrown in version 1.3 of Velocity-Tools, which I used until recently. > Finally, using $link.setAction works without going through the ActionServlet > -- > it only appears to be the $link.setForward that suffers from this problem. > I asked around on the Struts user mailing list and got some feedback. Original > post: http://www.junlu.com/msg/89307.html (Sorry, the Struts-user archives > haven't caught up with the latest messages, I guess, so I can't provide a > direct > link to the mailing list archives). > Anyway, in the short discussion that followed, I asked about how the Struts > "forward" tag worked that comes with struts -- did it require that the request > go through the ActionServlet? The answer was "no": if the request hasn't been > through the ActionServlet, yet, there's a bit of code to insert the proper > attribute into the session before calling RequestUtils.forwardURL(). > The bit of code is essentially this: > StringBuffer url = new StringBuffer(); > if (fc.getPath().startsWith("/")) > { > url.append(request.getContextPath()); > // <new> > if(null == request.getAttribute(Globals.MODULE_KEY)) > request.setAttribute(Globals.MODULE_KEY, moduleConfig); > // </new> > url.append(RequestUtils.forwardURL(request, fc)); > } > I have made this change for my project and it works like a charm. Since the > Struts forward tag also uses this technique, I figure that it's a decent fix. > I'll provide a patch which includes this fix. > Thanks, > -chris -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
