dims 01/07/11 08:16:59 Modified: src/org/apache/cocoon/acting Tag: cocoon_20_branch RequestParamAction.java Log: Patch from Torsten for populating Request Details into the sitemap. Revision Changes Path No revision No revision 1.1.2.2 +56 -37 xml-cocoon2/src/org/apache/cocoon/acting/RequestParamAction.java Index: RequestParamAction.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/org/apache/cocoon/acting/RequestParamAction.java,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -r1.1.2.1 -r1.1.2.2 --- RequestParamAction.java 2001/07/06 21:32:27 1.1.2.1 +++ RequestParamAction.java 2001/07/11 15:16:54 1.1.2.2 @@ -25,10 +25,18 @@ import org.apache.avalon.framework.parameters.Parameters; /** - * This action makes all request parameters available for use in the sitemap. - * A variable is created for each request parameter (only if it doesn't exist) - * with the same name as the parameter itself. + * This action makes some request details available to the sitemap via parameter + * substitution. * + * {context} - is the context path of the servlet (usually "/cocoon") + * {requestURI} - is the requested URI without parameters + * {requestQuery} - is the query string like "?param1=test" if there is one + * + * Additionlly all request parameters can be made available for use in the sitemap. + * if the parameter "parameters" is set to true. + * (A variable is created for each request parameter (only if it doesn't exist) + * with the same name as the parameter itself) + * * Sitemap definition: * * <pre> @@ -42,7 +50,8 @@ * <pre> * <map:match pattern="some-resource"> * <map:act type="request"> - * <map:redirect-to uri="{dest}"/> + * <map:parameter name="parameters" value="true"/> + * <map:redirect-to uri="{context}/somewhereelse/{dest}"/> * </map:act> * </map:match> * </pre> @@ -52,6 +61,7 @@ * <pre> * <map:match pattern="some-resource"> * <map:act type="request"> + * <map:parameter name="parameters" value="true"/> * <map:generate src="users/menu-{id}.xml"/> * </map:act> * <map:transform src="menus/personalisation.xsl"/> @@ -62,43 +72,52 @@ * etc, etc. * * @author <a href="mailto:[EMAIL PROTECTED]">Marcus Crafter</a> - * @version CVS $Revision: 1.1.2.1 $ + * @author <a href="mailto:[EMAIL PROTECTED]">Torsten Curdt</a> + * @version CVS $Revision: 1.1.2.2 $ */ public class RequestParamAction extends ComposerAction { - - /** - * Action which makes all request parameters available for xpath - * substitution. - */ - public Map act( - Redirector redirector, - SourceResolver resolver, - Map objectModel, - String source, - Parameters par - ) throws Exception { - - Request request = - (Request) objectModel.get(Constants.REQUEST_OBJECT); - - Enumeration e = request.getParameterNames(); - - if (e.hasMoreElements()) { - - Map map = new HashMap(); - while(e.hasMoreElements()) - { - String name = (String) e.nextElement(); - String value = request.getParameter(name); - - if (value != null && !map.containsKey(name)) - map.put(name, value); + public final static String MAP_URI = "requestURI"; + public final static String MAP_QUERY = "requestQuery"; + public final static String MAP_CONTEXTPATH = "context"; + + public final static String PARAM_PARAMETERS = "parameters"; + + public Map act( Redirector redirector, SourceResolver resolver, Map objectModel, String source, Parameters param ) + throws Exception + { + + Request request = (Request) objectModel.get(Constants.REQUEST_OBJECT); + if (request == null) { + getLogger().error("RequestInfoAction: no request object!"); + return(null); + } + + Map map = new HashMap(); + + map.put(MAP_URI, request.getRequestURI()); + + String query = request.getQueryString(); + if (query != null && query.length() > 0){ + map.put(MAP_QUERY, "?" + query); + } + else{ + map.put(MAP_QUERY, ""); + } + + map.put(MAP_CONTEXTPATH, request.getContextPath()); + + if ("true".equalsIgnoreCase(param.getParameter(PARAM_PARAMETERS, null))){ + Enumeration e = request.getParameterNames(); + while(e.hasMoreElements()){ + String name = (String) e.nextElement(); + String value = request.getParameter(name); + if (value != null && !map.containsKey(name)){ + map.put(name, value); } - - return map; + } } - - return null; + + return(map); } } ---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]