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 Wed, 29 Apr 2015 12:00:07 GMT

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

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

Okay, I figured out why it doesn't work for me, but it is working for everyone else.  I have
my struts configured to propagate OgnlExceptions. By default they are swallowed, so the exception
I showed in the original bug report is dropped and the rendering continues just fine (I verified
this by turning off the propagation of OgnlExceptions locally).

You can verify it by putting a breakpoint in OgnlValueStack.handleOgnlException(), and you
will see that the only reason it is working for you is that throwExceptionOnFailure is false.


My patch above will remove this as an issue for those of us who want to see OgnlExceptions
(when I turned this on I found a lot of bugs in our code that had been previously masked.)
 

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)

Mime
View raw message