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 a9b8f50f9..e010eadd4 100644 --- a/core/src/main/java/org/apache/struts2/components/UIBean.java +++ b/core/src/main/java/org/apache/struts2/components/UIBean.java @@ -20,6 +20,7 @@ package org.apache.struts2.components; import com.opensymphony.xwork2.config.ConfigurationException; import com.opensymphony.xwork2.inject.Inject; +import com.opensymphony.xwork2.util.TextParseUtil; import com.opensymphony.xwork2.util.ValueStack; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; @@ -1278,7 +1279,8 @@ public abstract class UIBean extends Component { if (!isValidTagAttribute(attrName)) { if (ComponentUtils.altSyntax(getStack()) && ComponentUtils.containsExpression(attrValue) && !lazyEvaluation()) { - dynamicAttributes.put(attrName, ObjectUtils.defaultIfNull(findString(attrValue), attrValue)); + String translated = TextParseUtil.translateVariables('%', attrValue, stack); + dynamicAttributes.put(attrName, ObjectUtils.defaultIfNull(translated, attrValue)); } else { dynamicAttributes.put(attrName, attrValue); } diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/TextfieldTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/TextfieldTest.java index cf300e806..56d0eaa15 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/ui/TextfieldTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/TextfieldTest.java @@ -372,7 +372,7 @@ public class TextfieldTest extends AbstractUITagTest { tag.setName("myname"); tag.setValue("%{foo}"); tag.setSize("10"); - tag.setDynamicAttribute(null, "anotherAttr", "%{foo}"); + tag.setDynamicAttribute(null, "anotherAttr", "another_%{foo}"); tag.doStartTag(); setComponentTagClearTagState(tag, true); // Ensure component tag state clearing is set true (to match tag).