[ https://issues.apache.org/jira/browse/WW-4176?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Lukasz Lenart updated WW-4176: ------------------------------ Fix Version/s: (was: 2.5.x) 2.5.13 2.3.34 > Struts2 JSON Plugin: Send Map with Strings as Key to JSON Action is ignored, > Numeric Keys will work and mapped > -------------------------------------------------------------------------------------------------------------- > > Key: WW-4176 > URL: https://issues.apache.org/jira/browse/WW-4176 > Project: Struts 2 > Issue Type: Bug > Components: Plugin - JSON > Affects Versions: 2.3.14.3 > Environment: Tomcat6, Struts 2.3.14.3,JSON Plugin 2.3.14.3,jquery > Reporter: Stefan Abendroth > Assignee: Lukasz Lenart > Fix For: 2.3.34, 2.5.13 > > Attachments: WW-4176-proposal.patch > > > Sending Map from javascript/jsp to JSON Action, when the Keys are numeric > everything works, when the keys are Strings then these entries are thrown > away while the mapping process in the JSON Action takes place. > Important note: If i create a map in the JSON Action and send it to the > client everything is ok. > alert which shows the Server generated JSON: > {noformat} > ServerJSON{"1":"1","2":"ANOTHERVALUE","ANOTHERKEY":"1","KEY":"VALUE"} > {noformat} > If i look into the sended data from javascript side in Eclipse i see in debug > mode: > {noformat} > this=>myJSONMap:{2=[Ljava.lang.String;@3caf7a1f, > 23=[Ljava.lang.String;@247aa859} > {noformat} > Alert shows on client side: > {noformat} > ClientJSON{"2":["ANOTHERVALUE"],"23":["1"]} > {noformat} > Hope it's clear where the problem is. Bug or misunderstood anything? > Would like to have a List of keys,values where the keys can be > String/Long/Int and the values can be String/Long/int. > The direction Server generated Map=>JSON is ok, sending the same from client > side will lose the entries with a String key. > Further i tried also to specify my Map like > {code:java} > private Map<String, String> propertyValueMap = new LinkedHashMap<String, > String>(); > {code} > and set the getters/setters but don't work either. > Here is a part of my code: > JSP PAGE: > {code:html} > <form action="" id="testForm1"> > testForm1<input type="submit"/> > </form> > <script> > $("#testForm1").submit(function(event){ > event.preventDefault(); //Cancel the default action (navigation) of the click. > var data={"1":"1","2":"ANOTHERVALUE","ANOTHERKEY":"1","KEY":"VALUE"}; > var sentData={}; > sentData["myJSONMap"]=data; > $.getJSON("<s:url namespace="/ajax" action="testMap"/>", sentData > ,function(data3) { > alert("Server generated JSON"+JSON.stringify(data3.mymap)); > alert("Client generated JSON"+JSON.stringify(data3.myJSONMap)); > }); > }); > {code} > JSON Action config: > {code:xml} > <struts> > <package name="PIM_JSONDataPackage" namespace="/ajax" > extends="struts-default,json-default"> > <action name="testMap" method="testMap" > class="eu.mtd.actions.JSON_DropDownPropertyValuesAction"> > <result type="json" /> > <param name="noCache">true</param> > </action> > </package> > </struts> > {code} > JSON Action > {code:java} > public class JSON_DropDownPropertyValuesAction extends ActionSupport{ > private static final long serialVersionUID = 1L; > private Map session; > @SuppressWarnings("rawtypes") > private Map mymap = new HashMap(); > @SuppressWarnings("rawtypes") > private Map myJSONMap = new HashMap(); > public JSON_DropDownPropertyValuesAction(){} > @SuppressWarnings("unchecked") > public String testMap(){ > mymap.put("KEY", "VALUE"); > mymap.put("1", "1"); > mymap.put("ANOTHERKEY", "1"); > mymap.put("2", "ANOTHERVALUE"); > //Creates JSON: > {"1":"1","2":"ANOTHERVALUE","ANOTHERKEY":"1","KEY":"VALUE"} > return SUCCESS; > } > public String execute() { > return SUCCESS; > } > @SuppressWarnings("rawtypes") > public Map getMymap() { > return mymap; > } > @SuppressWarnings("rawtypes") > public void setMymap(Map mymap) { > this.mymap = mymap; > } > > @SuppressWarnings("rawtypes") > public Map getMyJSONMap() { > return myJSONMap; > } > > @SuppressWarnings("rawtypes") > public void setMyJSONMap(Map myJSONMap) { > this.myJSONMap = myJSONMap; > } > public Map getSession() { > return session; > } > public void setSession(Map session) { > this.session = session; > } > {code} -- This message was sent by Atlassian JIRA (v6.4.14#64029)