2012-03-19 59 views
0

我有一個Struts 2應用程序,我在其中使用struts 2 json插件進行json處理。我如何創建json格式的數據

現在我想使用dojo數據網格來填充操作中的數據。我可以打電話給我。所有內置的數據類型都在工作中。但是當我在我的類中使用自定義對象時,我在動作類中出現錯誤。

我想用ItemFileReadStore的商店,其格式一樣需要數據網格:

items: [{obj1},{obj2},{obj3},{obj4}] 

現在我有一個類調用設備。我想將Device對象的列表發送回客戶端。但是,我如何提供上述格式的數據並在客戶端使用它。

編輯:

我得到以下錯誤:

E com.ibm.ws.webcontainer.webapp.WebApp logError SRVE0293E: [Servlet Error]-[com.googlecode.jsonplugin.JSONException: com.googlecode.jsonplugin.JSONException: java.lang.reflect.InvocationTargetException]: com.ibm.ws.webcontainer.webapp.WebAppErrorReport: com.googlecode.jsonplugin.JSONException: com.googlecode.jsonplugin.JSONException: java.lang.reflect.InvocationTargetException 
at com.ibm.ws.webcontainer.webapp.WebAppDispatcherContext.sendError(WebAppDispatcherContext.java:624) 
at com.ibm.ws.webcontainer.srt.SRTServletResponse.sendError(SRTServletResponse.java:1071) 
at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:725) 
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485) 
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395) 
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:188) 
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:116) 
at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:77) 
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:852) 
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:917) 
at com.ibm.ws.webcontainer.extension.DefaultExtensionProcessor.invokeFilters(DefaultExtensionProcessor.java:924) 
at com.ibm.ws.webcontainer.extension.DefaultExtensionProcessor.handleRequest(DefaultExtensionProcessor.java:852) 
at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3610) 
at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:274) 
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:926) 
at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1557) 
at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:173) 
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:455) 
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:384) 
at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:83) 
at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165) 
at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217) 
at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161) 
at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138) 
at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:202) 
at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:766) 
at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:896) 
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1527) 

,這是什麼錯誤的原因。我的動作類:

jsonWrapper.setIdentifier("firstName");   

     jsonWrapper.getListItems().add(User.getUser("t2590pk"));    
     jsonWrapper.getListItems().add(User.getUser("t8923sm")); 

     jsonWrapper.setItems(jsonWrapper.gson.toJson(jsonWrapper.getListItems())); 

     System.out.println(jsonWrapper.getItems()); 

的Struts配置:

<action name="jsonTest" class="com.dcx.ispeed.actions.JSONTest">    
     <result type="json">     
      <param name="excludeProperties"> 
       gson 
      </param>     
     </result> 
    </action> 

的jsonWrapper類:

/** 


* 
*/ 
package com.dcx.ispeed.business; 

import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import com.google.gson.Gson; 
import com.ibm.ws.http.HttpRequest; 

/** 
* @author t2590pk 
* 
*/ 
public class JSONWrapper { 
    public Gson gson = new Gson(); 

    private String identifier; 

    private String label; 

    private String items; 

    private List listItems = new ArrayList(); 

    public String getIdentifier() { 
     return identifier; 
    } 

    public void setIdentifier(String identifier) { 
     this.identifier = identifier; 
    } 

    public String getLabel() { 
     return label; 
    } 

    public void setLabel(String label) { 
     this.label = label; 
    } 

    public String getItems() { 
     return items; 
    } 

    public void setItems(String items) { 
     this.items = items; 
    } 

    public List getListItems() { 
     return listItems; 
    } 

    public void setListItems(List listItems) { 
     this.listItems = listItems; 
    } 

    /** 
    * 
    */ 
    public JSONWrapper() { 
     System.out.println("Calling JSON wrapper constructor."); 
    } 

} 

謝謝.. :)

+0

我使用struts2-json-plugin和各種數據類型甚至是JPA實體...所以我相信它可以這樣做。記住你的行爲是你想要進入視圖的編組點。你可以創建一個ArrayList並用你想要的來填充它。你可能知道包含和排除參數在這裏看到:http://struts.apache.org/2.2.3/docs/json-plugin.html和在這裏看到使用它們與註釋(我的首選方式):http:///stackoverflow.com/questions/4796390/struts2-json-serialization-of-items/4796742#4796742 – Quaternion 2012-03-19 21:10:54

回答

1

您可以使用谷歌GSON包如下

import com.google.gson.Gson; 

String json = "{\"name\":\"ABC\",\"address\":\"some address\"}"; 
Gson gson = new Gson(); 
Person person = gson.fromJson(json, Person.class); 

public class Person{ 
    public String name; 
    public String address; 
} 

注意:您必須實現Person類的默認構造函數和所有getter和setter。 您的案例中的陣列將是一個集

+0

我的行動中有以下代碼: 'jsonWrapper.setIdentifier(「firstName」); 用戶u = User.getUser(「xyz」); jsonWrapper.getListItems()。add(u); \t u = User.getUser(「pqr」); jsonWrapper.getListItems()。add(u); Gson gson = new Gson(); jsonWrapper.setItems(gson.toJson(jsonWrapper.getListItems()));' 我使用的是Struts2 json插件。項目設置正確。但是,我在Action中收到以下錯誤。 [Servlet錯誤] - [com.googlecode.jsonplugin.JSONException:com.googlecode.jsonplugin.JSONException:java.lang.reflect.InvocationTargetException。 – pratik 2012-03-20 10:44:37

0

這可能會發生在您的gson庫中,所以請更新您的gson庫並在您使用json時會出現jsonException,這會顯示您的代碼異常即將到來的位置。