You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Doug Padian <DP...@sportvision.com> on 2003/06/17 19:13:32 UTC

Multipart request losing parameters when forwarded

I can't seem to figure this one out.  My action class is getting a request coming from a form that has the enctype of "multipart/form-data".  From looking in the JavaDocs, I see that what ends up in the Action method is a MultipartRequestWrapper which wraps the HttpServletRequest.  The Javadocs say that this wrapper exists within the action method, but once it gets forwarded, it reverts back to the HttpServletRequest.  And that's where I have the problem.  Here's my action method:

public ActionForward hold (
			ActionMapping mapping,
			ActionForm form,
			HttpServletRequest request,
			HttpServletResponse response) throws ServletException {
		log.debug("here in the hold() method");
		log.debug("The class passed in is: " + request.getClass().toString());
		log.debug("component key: " + request.getParameter("componentKey"));
		MultipartRequestWrapper wrapper = (MultipartRequestWrapper)request;
		HttpServletRequest req = wrapper.getRequest();
		log.debug("component key from http request: " + req.getParameter("componentKey"));
		
		ImageAsset asset = (ImageAsset)SessionDataContainer.getComponent(request);
		copyProperties(asset,form);
		//FIXIT this is hardcoded for now
		AssetType assetType = AssetTypes.lookUpAssetTypeByExtension("gif");
		asset.setAssetType(assetType);
		asset.setFileName("blah.gif");
		asset.setCreationDate(new Date());
		asset.setLocation("/images/");
		ActionForward forward = StrutsUtil.getForwardToMapping(request, mapping);
		log.debug("Action foward: " + forward.getName());
		String componentKey = request.getParameter("componentKey");
		req.setAttribute("componentKey", componentKey);
		request = req;
		return forward;
	}

There is a lot of logging in there, but I am getting a certain parameter, "componentKey", which I am getting out of the request, and that works fine.  The problem occurs when I forward this onto another Struts action class.  In that class, it tries to access the same parameter -- "componentKey" from the request, but it comes back empty.  I think this is happening because, when the request gets forwarded on, it converts to a regular HttpServletRequest, and the parameter is lost.  You can see in the method above, I'm trying to convert request back to an HttpServletRequest, and then set the parameter as an attribute, but this doesn't work.

Any ideas on how to handle this?  I am using Struts 1.1 release candicate 1.  Thanks!!

-Doug Padian