struts-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jasper Rosenberg (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (WW-4493) Still can't pass parameters with dashes to tags
Date Thu, 30 Apr 2015 11:52:06 GMT

    [ https://issues.apache.org/jira/browse/WW-4493?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14521367#comment-14521367
] 

Jasper Rosenberg commented on WW-4493:
--------------------------------------

Awesome, just let me know when there is a release candidate I can test, 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.20
>            Reporter: Jasper Rosenberg
>            Assignee: Lukasz Lenart
>            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)

Mime
View raw message