[ https://issues.apache.org/jira/browse/WW-4493?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14510147#comment-14510147 ]
Jasper Rosenberg commented on WW-4493: -------------------------------------- Unfortunately, I can't right now. Can you please post a comment with just the snippet of your sample freemarker code that is using an attribute with a dash in a struts tag successfully? Thanks! > Still can't pass parameters with dashes to tags > ----------------------------------------------- > > Key: WW-4493 > URL: https://issues.apache.org/jira/browse/WW-4493 > Project: Struts 2 > Issue Type: Bug > Components: Expression Language > Affects Versions: 2.3.23 > Reporter: Jasper Rosenberg > Priority: Minor > Labels: freemarker, tags > Fix For: 2.3.24 > > > The latest freemarker now supports dashes in attribute names, so I can write > something like: > {code:xml} > <@s.form name="sendToPhone" data\-ajax="false"> > </@s.form> > {code} > Unfortunately, the parameters are set using ognl internally, so it blows up > with an error like: > {noformat} > Caused by: ognl.InappropriateExpressionException: Inappropriate OGNL > expression: data - ajax > at ognl.SimpleNode.setValueBody(SimpleNode.java:312) > at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220) > at ognl.SimpleNode.setValue(SimpleNode.java:301) > at ognl.Ognl.setValue(Ognl.java:737) > at com.opensymphony.xwork2.ognl.OgnlUtil$1.execute(OgnlUtil.java:287) > at com.opensymphony.xwork2.ognl.OgnlUtil$1.execute(OgnlUtil.java:282) > at > com.opensymphony.xwork2.ognl.OgnlUtil.compileAndExecute(OgnlUtil.java:340) > at com.opensymphony.xwork2.ognl.OgnlUtil.setValue(OgnlUtil.java:282) > {noformat} > I think there is a simple solution, which is to send any parameters with an > dash directly to the parameters map like so: > {code:title=Component.java|borderStyle=solid} > /** > * Pushes this component's parameter Map as well as the component itself > on to the stack > * and then copies the supplied parameters over. Because the component's > parameter Map is > * pushed before the component itself, any key-value pair that can't be > assigned to component > * will be set in the parameters Map. > * > * @param params the parameters to copy. > */ > public void copyParams(Map params) { > stack.push(parameters); > stack.push(this); > try { > for (Object o : params.entrySet()) { > Map.Entry entry = (Map.Entry) o; > String key = (String) entry.getKey(); > > if (key.indexOf('-') >= 0) { > // UI component attributes may contain hypens (e.g. > data-ajax), but ognl > // can't handle that, and there can't be a component > property with a hypen > // so into the parameters map it goes. > parameters.put(key, entry.getValue()); > } else { > stack.setValue(key, entry.getValue()); > } > } > } finally { > stack.pop(); > stack.pop(); > } > } > {code} > Hoping this can make it into 2.3.24, thanks! -- This message was sent by Atlassian JIRA (v6.3.4#6332)