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 e7a12d9c8..01d3afa81 100644 --- a/core/src/main/java/org/apache/struts2/components/UIBean.java +++ b/core/src/main/java/org/apache/struts2/components/UIBean.java @@ -872,9 +872,10 @@ public abstract class UIBean extends Component { addParameter("id", id); } } else if (form != null) { - addParameter("id", form.getParameters().get("id") + "_" + escape(name)); + addParameter("id", form.getParameters().get("id") + "_" + + escape(name != null ? findString(name) : null)); } else { - addParameter("id", escape(name)); + addParameter("id", escape(name != null ? findString(name) : null)); } } 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 20096c146..cf380a698 100644 --- a/core/src/test/java/org/apache/struts2/components/UIBeanTest.java +++ b/core/src/test/java/org/apache/struts2/components/UIBeanTest.java @@ -48,6 +48,22 @@ public class UIBeanTest extends StrutsTestCase { assertEquals("txtFldId", txtFld.getParameters().get("id")); } + + public void testPopulateComponentHtmlIdWithOgnl() throws Exception { + ValueStack stack = ValueStackFactory.getFactory().createValueStack(); + MockHttpServletRequest req = new MockHttpServletRequest(); + MockHttpServletResponse res = new MockHttpServletResponse(); + + Form form = new Form(stack, req, res); + form.getParameters().put("id", "formId"); + + TextField txtFld = new TextField(stack, req, res); + txtFld.setName("txtFldName%{'1'}"); + + txtFld.populateComponentHtmlId(form); + + assertEquals("formId_txtFldName1", txtFld.getParameters().get("id")); + } public void testPopulateComponentHtmlId2() throws Exception { ValueStack stack = ValueStackFactory.getFactory().createValueStack();