Return-Path: X-Original-To: apmail-struts-issues-archive@minotaur.apache.org Delivered-To: apmail-struts-issues-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id B1E82FE8F for ; Thu, 4 Apr 2013 05:05:17 +0000 (UTC) Received: (qmail 93847 invoked by uid 500); 4 Apr 2013 05:05:17 -0000 Delivered-To: apmail-struts-issues-archive@struts.apache.org Received: (qmail 93623 invoked by uid 500); 4 Apr 2013 05:05:17 -0000 Mailing-List: contact issues-help@struts.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@struts.apache.org Delivered-To: mailing list issues@struts.apache.org Received: (qmail 93577 invoked by uid 99); 4 Apr 2013 05:05:15 -0000 Received: from arcas.apache.org (HELO arcas.apache.org) (140.211.11.28) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 04 Apr 2013 05:05:15 +0000 Date: Thu, 4 Apr 2013 05:05:15 +0000 (UTC) From: "Lukasz Lenart (JIRA)" To: issues@struts.apache.org Message-ID: In-Reply-To: References: Subject: [jira] [Updated] (WW-4036) With javatemplate, dynamic attribute value evaluates to expression text if null MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 [ https://issues.apache.org/jira/browse/WW-4036?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Lukasz Lenart updated WW-4036: ------------------------------ Fix Version/s: 2.3.15 > With javatemplate, dynamic attribute value evaluates to expression text if null > ------------------------------------------------------------------------------- > > Key: WW-4036 > URL: https://issues.apache.org/jira/browse/WW-4036 > Project: Struts 2 > Issue Type: Bug > Components: Plugin - Java Templates > Affects Versions: 2.3.12 > Reporter: Walid Ghafir > Fix For: 2.3.15 > > Attachments: placeholder.zip > > > When using javatemplate plugin, if a dynamic attribute has an expression value that evaluates to null, the full expression text is displayed instead of just an empty string. > Example: > {code:html} > > {code} > will output > {code:html} > > {code} > in the HTML. > By debugging, I found it comes from AbstractUITag.setDynamicAttribute(): > {code:java} > dynamicAttributes.put(localName, String.valueOf(ObjectUtils.defaultIfNull(findValue(value.toString()), value))); > {code} > That problem does not occur with FTL themes as dynamic-attributes.ftl uses TextParseUtil.translateVariables() which does what the doc says ("If an item cannot be found on the stack (null is returned), then the entire variable %\{...\} is not displayed, just as if the item was on the stack but returned an empty string."). > *Suggested fix #1* > Change org.apache.struts2.views.java.simple.DynamicAttributesHandler.start() so that it does the same than dynamic-attributes.ftl: > {code:java|title=DynamicAttributesHandler.java} > @Override > public void start(String name, Attributes a) throws IOException { > Map dynamicAttributes = (Map) context.getParameters().get("dynamicAttributes"); > for (String key : dynamicAttributes.keySet()) > a.put(key, TextParseUtil.translateVariables(dynamicAttributes.get(key), context.getStack())); > super.start(name, a); > } > {code} > *Suggested fix #2* > Or change org.apache.struts2.views.jsp.ui.AbstractUITag.setDynamicAttribute() so that it returns an empty string if the expression evaluates to null: > {code:java|title=AbstractUITag.java} > public void setDynamicAttribute(String uri, String localName, Object value) throws JspException { > if (ComponentUtils.altSyntax(getStack()) && ComponentUtils.isExpression(value)) { > dynamicAttributes.put(localName, String.valueOf(ObjectUtils.defaultIfNull(findValue(value.toString()), ""))); > } else { > dynamicAttributes.put(localName, value); > } > } > {code} > (but I have no idea on the possible side effects it could produce). -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira