[
https://issues.apache.org/jira/browse/WW-4176?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Stefan Abendroth updated WW-4176:
---------------------------------
Summary: Struts2 JSON Plugin: Send Map with Strings as Key to JSON Action
is ignored, Numeric Keys will work and mapped (was: Send Map with Strings as
Key to JSON Action is ignored, Numeric Keys will work and mapped)
> 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
>
> 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:
> ServerJSON{"1":"1","2":"ANOTHERVALUE","ANOTHERKEY":"1","KEY":"VALUE"}
> If i look into the sended data from javascript side in Eclipse i see in debug
> mode:
> this=>myJSONMap:{2=[Ljava.lang.String;@3caf7a1f,
> 23=[Ljava.lang.String;@247aa859}
> Alert shows on client side:
> ClientJSON{"2":["ANOTHERVALUE"],"23":["1"]}
> 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
> private Map<String, String> propertyValueMap = new LinkedHashMap<String,
> String>();
> and set the getters/setters but don't work either.
> Here is a part of my code:
> JSP PAGE:
> <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));
> });
> });
> JSON Action config:
> <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>
> JSON Action
> 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;
> }
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira