From 4b22558a06d7033e7ef3ed4f3122a4913b045c5c Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Thu, 20 Jun 2013 20:34:20 -0400 Subject: [PATCH] Add HTTP method to RequestDataValueProcessor method Issue: SPR-10041, SPR-10652 --- .../web/servlet/support/RequestDataValueProcessor.java | 5 +++-- .../springframework/web/servlet/tags/form/FormTag.java | 9 ++++++--- .../support/RequestDataValueProcessorWrapper.java | 8 +++----- .../web/servlet/tags/form/FormTagTests.java | 2 +- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/support/RequestDataValueProcessor.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/support/RequestDataValueProcessor.java index 6dd24b7826..2ce8a20739 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/support/RequestDataValueProcessor.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/support/RequestDataValueProcessor.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -42,9 +42,10 @@ public interface RequestDataValueProcessor { * Invoked when a new form action is rendered. * @param request the current request * @param action the form action + * @param httpMethod the form HTTP method * @return the action to use, possibly modified */ - String processAction(HttpServletRequest request, String action); + String processAction(HttpServletRequest request, String action, String httpMethod); /** * Invoked when a form field value is rendered. diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/FormTag.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/FormTag.java index 7548ded940..a58b4c7acb 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/FormTag.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/FormTag.java @@ -346,8 +346,7 @@ public class FormTag extends AbstractHtmlElementTag { tagWriter.startTag(FORM_TAG); writeDefaultAttributes(tagWriter); tagWriter.writeAttribute(ACTION_ATTRIBUTE, resolveAction()); - writeOptionalAttribute(tagWriter, METHOD_ATTRIBUTE, - isMethodBrowserSupported(getMethod()) ? getMethod() : DEFAULT_METHOD); + writeOptionalAttribute(tagWriter, METHOD_ATTRIBUTE, getHttpMethod()); writeOptionalAttribute(tagWriter, TARGET_ATTRIBUTE, getTarget()); writeOptionalAttribute(tagWriter, ENCTYPE_ATTRIBUTE, getEnctype()); writeOptionalAttribute(tagWriter, ACCEPT_CHARSET_ATTRIBUTE, getAcceptCharset()); @@ -382,6 +381,10 @@ public class FormTag extends AbstractHtmlElementTag { return EVAL_BODY_INCLUDE; } + private String getHttpMethod() { + return isMethodBrowserSupported(getMethod()) ? getMethod() : DEFAULT_METHOD; + } + private void assertHttpMethod(String method) { for (HttpMethod httpMethod : HttpMethod.values()) { if (httpMethod.name().equalsIgnoreCase(method)) { @@ -465,7 +468,7 @@ public class FormTag extends AbstractHtmlElementTag { RequestDataValueProcessor processor = getRequestContext().getRequestDataValueProcessor(); ServletRequest request = this.pageContext.getRequest(); if ((processor != null) && (request instanceof HttpServletRequest)) { - action = processor.processAction((HttpServletRequest) request, action); + action = processor.processAction((HttpServletRequest) request, action, getHttpMethod()); } return action; } diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/support/RequestDataValueProcessorWrapper.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/support/RequestDataValueProcessorWrapper.java index 4d5b846832..f760ed262a 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/support/RequestDataValueProcessorWrapper.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/support/RequestDataValueProcessorWrapper.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,8 +20,6 @@ import java.util.Map; import javax.servlet.http.HttpServletRequest; -import org.springframework.web.servlet.support.RequestDataValueProcessor; - public class RequestDataValueProcessorWrapper implements RequestDataValueProcessor { private RequestDataValueProcessor processor; @@ -41,8 +39,8 @@ public class RequestDataValueProcessorWrapper implements RequestDataValueProcess } @Override - public String processAction(HttpServletRequest request, String action) { - return (this.processor != null) ? this.processor.processAction(request, action) : action; + public String processAction(HttpServletRequest request, String action, String httpMethod) { + return (this.processor != null) ? this.processor.processAction(request, action, httpMethod) : action; } @Override diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/FormTagTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/FormTagTests.java index a0ff3611d9..43f86fac47 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/FormTagTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/FormTagTests.java @@ -326,7 +326,7 @@ public class FormTagTests extends AbstractHtmlElementTagTests { public void testRequestDataValueProcessorHooks() throws Exception { String action = "/my/form?foo=bar"; RequestDataValueProcessor processor = getMockRequestDataValueProcessor(); - given(processor.processAction(this.request, action)).willReturn(action); + given(processor.processAction(this.request, action, "post")).willReturn(action); given(processor.getExtraHiddenFields(this.request)).willReturn(Collections.singletonMap("key", "value")); this.tag.doStartTag();