diff --git a/core/src/main/java/org/apache/struts2/components/UIBean.java b/core/src/main/java/org/apache/struts2/components/UIBean.java index 4f806f4fc..dbd98ff3e 100644 --- a/core/src/main/java/org/apache/struts2/components/UIBean.java +++ b/core/src/main/java/org/apache/struts2/components/UIBean.java @@ -859,7 +859,7 @@ public abstract class UIBean extends Component { protected String escape(String name) { // escape any possible values that can make the ID painful to work with in JavaScript if (name != null) { - return name.replaceAll("[^a-zA-Z0-9_]", "_"); + return name.replaceAll("[\\/\\.\\[\\]]", "_"); } else { return ""; } diff --git a/core/src/main/resources/template/xhtml/form-close-validate.ftl b/core/src/main/resources/template/xhtml/form-close-validate.ftl index 533a4f78f..b9521058c 100644 --- a/core/src/main/resources/template/xhtml/form-close-validate.ftl +++ b/core/src/main/resources/template/xhtml/form-close-validate.ftl @@ -35,7 +35,7 @@ END SNIPPET: supported-validators --> <#if ((parameters.validate?default(false) == true) && (parameters.performValidation?default(false) == true))> <#if parameters.onsubmit??> - ${tag.addParameter('onsubmit', "${parameters.onsubmit}; return validateForm_${parameters.id}();")} + ${tag.addParameter('onsubmit', "${parameters.onsubmit}; return validateForm_${parameters.id?replace('[^a-zA-Z0-9_]', '_', 'r')}();")} <#else> - ${tag.addParameter('onsubmit', "return validateForm_${parameters.id}();")} + ${tag.addParameter('onsubmit', "return validateForm_${parameters.id?replace('[^a-zA-Z0-9_]', '_', 'r')}();")} diff --git a/core/src/test/java/org/apache/struts2/components/UIBeanTest.java b/core/src/test/java/org/apache/struts2/components/UIBeanTest.java index accf885d1..0f00690f5 100644 --- a/core/src/test/java/org/apache/struts2/components/UIBeanTest.java +++ b/core/src/test/java/org/apache/struts2/components/UIBeanTest.java @@ -98,8 +98,8 @@ public class UIBeanTest extends StrutsTestCase { assertEquals(bean.escape("hello[world"), "hello_world"); assertEquals(bean.escape("hello.world"), "hello_world"); assertEquals(bean.escape("hello]world"), "hello_world"); - assertEquals(bean.escape("hello!world"), "hello_world"); - assertEquals(bean.escape("hello!@#$%^&*()world"), "hello__________world"); + assertEquals(bean.escape("hello!world"), "hello!world"); + assertEquals(bean.escape("hello!@#$%^&*()world"), "hello!@#$%^&*()world"); } public void testEscapeId() throws Exception { diff --git a/core/src/test/resources/org/apache/struts2/views/jsp/ui/Radio-6.txt b/core/src/test/resources/org/apache/struts2/views/jsp/ui/Radio-6.txt index c8cc2e640..d58184796 100644 --- a/core/src/test/resources/org/apache/struts2/views/jsp/ui/Radio-6.txt +++ b/core/src/test/resources/org/apache/struts2/views/jsp/ui/Radio-6.txt @@ -1,11 +1,11 @@ - - - - - - + + + + + +