[
https://issues.apache.org/jira/browse/WW-3730?focusedWorklogId=515040&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-515040
]
ASF GitHub Bot logged work on WW-3730:
--------------------------------------
Author: ASF GitHub Bot
Created on: 21/Nov/20 12:39
Start Date: 21/Nov/20 12:39
Worklog Time Spent: 10m
Work Description: yasserzamani commented on pull request #450:
URL: https://github.com/apache/struts/pull/450#issuecomment-731573665
I wonder if it's a breaking change why still [this
test](https://github.com/apache/struts/blob/a4793d27cf19546516167b1749e8d124c731e93a/core/src/test/java/org/apache/struts2/components/ActionComponentTest.java#L33)
passes. Couldn't find why!
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
Issue Time Tracking
-------------------
Worklog Id: (was: 515040)
Time Spent: 0.5h (was: 20m)
> 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
> Priority: Major
> Fix For: 2.6
>
> Time Spent: 0.5h
> Remaining Estimate: 0h
>
> {{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
(v8.3.4#803005)