提交 4b22558a 编写于 作者: R Rossen Stoyanchev

Add HTTP method to RequestDataValueProcessor method

Issue: SPR-10041, SPR-10652
上级 26fb8806
/*
* 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.
......
......@@ -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;
}
......
/*
* 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
......
......@@ -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();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册