struts-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Nils-Helge Garli (JIRA)" <>
Subject [jira] Commented: (WW-2846) s:url Tag with parameters does not work or results in ClassCastException
Date Tue, 21 Oct 2008 17:24:36 GMT


Nils-Helge Garli commented on WW-2846:

I've managed to reproduce and understand the problem with the ClassCastException, which affects
the first and third of your examples. The second example won't work unless you have an object
on the stack with the property abc. If you try

 <s:url value="editGadget.action">
     <s:param name="id" value="'abc'" />

(notice the extra ' ' in the value)

which probably results in what you would expect.

So to summarize how I see the problem:

Nested params doesn't work with non-string values. But nested params with String values does
work as expected.

A temporary workaround is to construct your non-portlet urls "by hand" or use some other tag
library to create them.

> s:url Tag with parameters does not work or results in ClassCastException
> ------------------------------------------------------------------------
>                 Key: WW-2846
>                 URL:
>             Project: Struts 2
>          Issue Type: Bug
>          Components: Plugin - Portlet, Plugin - Tags
>    Affects Versions:
>         Environment: Pluto 1.1.6, Java5
>            Reporter: Torsten Krah
>         Attachments: Param.diff
> Using Example 1 from s:url Tag
> does not work in an PortletEnvironment. Only the url is generated.
> Debugging to PortletUrlHelper the params map is empty.
>  <s:url value="editGadget.action">
>      <s:param name="id" value="%{selected}" />
>  </s:url>
> does not work. The params map is empty
>  <s:url value="editGadget.action">
>      <s:param name="id" value="abc" />
>  </s:url>
> does not work. The params map is empty.
>  <s:url value="editGadget.action">
>      <s:param name="id" value="40" />
>  </s:url>
> does not work. The param is in the Map, but its not a String, its an Integer - which
results in a ClassCastException at:
>   String key = (String);
>   String val = (String)params.get(key);
> Portlet Spec mentions to use Servlet for resource streaming and other things you can't
do with portlets.
> I need to generate servlet URLs containing parameters - but it seems i can't create them
with struts.
> Using "includeParams=ALL" (which you may use to get extraparams included), does result
> [Ljava.lang.String; cannot be cast to java.lang.String
> because PortletUrlHelper gots a method called: ensureParamsAreStringArrays which is called
when constructing the surrounding form ...
> which does convert the entire map to hold string arrays - but than buildResourceUrl must
fail everytime.
> Using get and %{ognlvaluexpr} it does work nearly, only the CCE is making things worse.
> The fault is 
>                 Object value = findValue(this.value);
>                 component.addParameter(name, value);
> in the param Tag. findValue does return actually an Integer instance which is put to
the parameter Map.
> This should be converted to String before inserting it to the map.
> Besides this, using All the above things still apply.

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message