I came up with a simple Extension to ActionForward to manage the addition of parameters in the forwards request and posted it on the wiki. I have a version with even more functionality which allows the replacing and removal of parameters and specific values of a parameter. Is this something the project would have an interest in?
-Mark
package edu.harvard.hmdc.curate.study; import java.util.Enumeration; import java.util.Hashtable; import java.net.URLEncoder; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionForward;
public class ExtendedActionForward extends ActionForward { private Hashtable parameters = new Hashtable(); public ExtendedActionForward(ActionForward forward) { super(forward.getName(),forward.getPath(),forward.getRedirect(),forward.getContextRelative()); } public ExtendedActionForward(ActionForward forward, HttpServletRequest request) { super(forward.getName(),forward.getPath(),forward.getRedirect(),forward.getContextRelative()); parameters.putAll(request.getParameterMap()); } public void replaceParameter(String name, String value) { parameters.put(name,new String[]{ value }); } public void replaceParameter(String name, String value, String oldValue) { String[] oldValues = (String[]) parameters.get(name); if (oldValues == null) { parameters.put(name,new String[]{ value }); } else { for(int i = 0 ; i < oldValues.length ; i++){ if(oldValues[i].equalsIgnoreCase(oldValue)) oldValues[i] = value; } } } public void removeParameter(String name) { parameters.remove(name); } public void removeParameter(String name, String value) { String[] oldValues = (String[]) parameters.get(name); if (oldValues != null) { for(int i = 0 ; i < oldValues.length ; i++){ if(oldValues[i].equalsIgnoreCase(value)) oldValues[i] = null; } } } public void addParameter(String name, String value) { String[] newValues = null; String[] oldValues = (String[]) parameters.get(name); if (oldValues == null) { newValues = new String[1]; newValues[0] = value; } else { newValues = new String[oldValues.length + 1]; System.arraycopy(oldValues, 0, newValues, 0, oldValues.length); newValues[oldValues.length] = value; } parameters.put(name, newValues); } public String getPath() { String result = super.getPath(); if(!parameters.isEmpty()) result += "?"; for(Enumeration enum = parameters.keys();enum.hasMoreElements();){ String next = (String)enum.nextElement(); String[] vals = (String[])parameters.get(next); for(int i = 0; i < vals.length;i++){ if(vals[i] != null){ result += next; result += "="; result += URLEncoder.encode(vals[i]); if(i <= vals.length-2 && vals[i+1] != null) result += "&"; } } if(enum.hasMoreElements()) result += "&"; } return result; } }
/* * Created on Jun 17, 2004 * * To change the template for this generated file go to * Window - Preferences - Java - Code Generation - Code and Comments */ package edu.harvard.hmdc.curate.study; import java.net.URLEncoder; import org.apache.struts.action.ActionForward; import junit.framework.TestCase; /** * @author mdiggory * * To change the template for this generated type comment go to * Window - Preferences - Java - Code Generation - Code and Comments */ public class ExtendedActionForwardTest extends TestCase { public void testActionForward(){ String name = "test"; String path = "/VDC/Curation/Foo"; ExtendedActionForward forward = new ExtendedActionForward(new ActionForward(name, path, true)); forward.addParameter("uri","http://www.google.com"); assertEquals(name,forward.getName()); assertEquals("/VDC/Curation/Foo?uri=" + URLEncoder.encode("http://www.google.com"),forward.getPath()); forward.addParameter("test","one"); assertEquals("/VDC/Curation/Foo?uri=" + URLEncoder.encode("http://www.google.com") + "&test=one",forward.getPath()); forward.addParameter("test","two"); assertEquals("/VDC/Curation/Foo?uri=" + URLEncoder.encode("http://www.google.com") + "&test=one&test=two",forward.getPath()); forward.removeParameter("uri"); assertEquals("/VDC/Curation/Foo?test=one&test=two",forward.getPath()); forward.replaceParameter("test","three","two"); assertEquals("/VDC/Curation/Foo?test=one&test=three",forward.getPath()); forward.removeParameter("test","three"); assertEquals("/VDC/Curation/Foo?test=one",forward.getPath()); } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]