Browse Source

Add encoding for the default action in FormTag

Issue: SPR-11426
pull/464/head
Rossen Stoyanchev 12 years ago
parent
commit
741b4b229a
  1. 11
      spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/FormTag.java
  2. 17
      spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/FormTagTests.java

11
spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/FormTag.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2013 the original author or authors. * Copyright 2002-2014 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -16,6 +16,7 @@
package org.springframework.web.servlet.tags.form; package org.springframework.web.servlet.tags.form;
import java.io.UnsupportedEncodingException;
import java.util.Map; import java.util.Map;
import javax.servlet.ServletRequest; import javax.servlet.ServletRequest;
@ -32,6 +33,7 @@ import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.springframework.web.servlet.support.RequestDataValueProcessor; import org.springframework.web.servlet.support.RequestDataValueProcessor;
import org.springframework.web.util.HtmlUtils; import org.springframework.web.util.HtmlUtils;
import org.springframework.web.util.UriUtils;
/** /**
* Databinding-aware JSP tag for rendering an HTML '{@code form}' whose * Databinding-aware JSP tag for rendering an HTML '{@code form}' whose
@ -442,6 +444,13 @@ public class FormTag extends AbstractHtmlElementTag {
} }
else { else {
String requestUri = getRequestContext().getRequestUri(); String requestUri = getRequestContext().getRequestUri();
String encoding = pageContext.getResponse().getCharacterEncoding();
try {
requestUri = UriUtils.encodePath(requestUri, encoding);
}
catch (UnsupportedEncodingException e) {
throw new JspException(e);
}
ServletResponse response = this.pageContext.getResponse(); ServletResponse response = this.pageContext.getResponse();
if (response instanceof HttpServletResponse) { if (response instanceof HttpServletResponse) {
requestUri = ((HttpServletResponse) response).encodeURL(requestUri); requestUri = ((HttpServletResponse) response).encodeURL(requestUri);

17
spring-webmvc/src/test/java/org/springframework/web/servlet/tags/form/FormTagTests.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2013 the original author or authors. * Copyright 2002-2014 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -340,6 +340,21 @@ public class FormTagTests extends AbstractHtmlElementTagTests {
assertFormTagClosed(output); assertFormTagClosed(output);
} }
public void testDefaultActionEncoded() throws Exception {
this.request.setRequestURI("/a b c");
request.setQueryString("");
this.tag.doStartTag();
this.tag.doEndTag();
this.tag.doFinally();
String output = getOutput();
String formOutput = getFormTag(output);
assertContainsAttribute(formOutput, "action", "/a%20b%20c");
}
private String getFormTag(String output) { private String getFormTag(String output) {
int inputStart = output.indexOf("<", 1); int inputStart = output.indexOf("<", 1);
int inputEnd = output.lastIndexOf(">", output.length() - 2); int inputEnd = output.lastIndexOf(">", output.length() - 2);

Loading…
Cancel
Save