struts-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Lukasz Lenart (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (WW-3730) action tag accepts only String arrays as parameters
Date Sun, 23 Apr 2017 09:20:04 GMT

     [ https://issues.apache.org/jira/browse/WW-3730?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Lukasz Lenart updated WW-3730:
------------------------------
    Fix Version/s:     (was: 3.0)
                   2.6

> action tag accepts only String arrays as parameters
> ---------------------------------------------------
>
>                 Key: WW-3730
>                 URL: https://issues.apache.org/jira/browse/WW-3730
>             Project: Struts 2
>          Issue Type: Bug
>          Components: Plugin - Tags
>    Affects Versions: 2.2.3.1, 2.3.1, 2.3.1.1, 2.3.20
>            Reporter: Pavel Kazlou
>             Fix For: 2.6
>
>
> {{org.apache.struts2.components.Component}} accepts arbitrary objects as parameters:

> {code}
>     public Map getParameters() {
>         return parameters;
>     }
>     ...
>     public void addParameter(String key, Object value) {
>         if (key != null) {
>             Map params = getParameters();
>             if (value == null) {
>                 params.remove(key);
>             } else {
>                 params.put(key, value);
>             }
>         }
>     }
> {code}
> But {{org.apache.struts2.components.ActionComponent}} explicitly casts all his parameters
to {{String[]}}:
> {code}
> protected Map<String,String[]> createParametersForContext() {
>         Map parentParams = null;
>         if (!ignoreContextParams) {
>             parentParams = new ActionContext(getStack().getContext()).getParameters();
>         }
>         Map<String,String[]> newParams = (parentParams != null) 
>             ? new HashMap<String,String[]>(parentParams) 
>             : new HashMap<String,String[]>();
>         if (parameters != null) {
>             Map<String,String[]> params = new HashMap<String,String[]>();
>             for (Iterator i = parameters.entrySet().iterator(); i.hasNext(); ) {
>                 Map.Entry entry = (Map.Entry) i.next();
>                 String key = (String) entry.getKey();
>                 Object val = entry.getValue();
>                 if (val.getClass().isArray() && String.class == val.getClass().getComponentType())
{
>                     params.put(key, (String[])val);
>                 } else {
>                     params.put(key, new String[]{val.toString()});
>                 }
>             }
>             newParams.putAll(params);
>         }
>         return newParams;
>     }
> {code}
> So I can't pass arbitrary objects directly to action using syntax:
> {code}
> <s:action name="myAction"><s:param name="customObject" value="customObject"/></s:action>
> {code}
> without conversion customObject->String->customObject.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Mime
View raw message