2013-05-25 23 views
3

我想要有一個Action類,它應該接受由用戶界面構建的JSON字符串,Action類中沒有setter和getter。從用戶界面接受動態json數據的動作

可能嗎?如果是這樣,我需要在Action類和配置文件(struts.xml)中遵循什麼約定?

+3

爲什麼沒有getter和setter?否則我可以向你解釋。 – Armaggedon

+0

我有很多靜態json格式嵌入到基於頁面上下文的java腳本文件中,我需要將這些靜態json字符串發送到相應的操作類 –

+0

XSS天堂O_O從服務器而不是客戶端加載它們://// –

回答

4

將它們作爲內容發佈,類型爲"application/json"。你可以用一個簡單的jQuery Ajax調用來完成,你可以指定content-typedataType

$.ajax({ 
    type: "POST", 
    url: "/the/action/url",  
    data : {}, 
    dataType:"JSON", 
    contentType: "application/json; charset=utf-8" 
}); 

添加json plugin到項目的依賴與json-lib-2.3-jdk15.jar。與interceptor json一起提供的插件,用於從請求中讀取和填充操作。如果你不想填充動作,那麼你不應該使用這個攔截器。而是手動解析請求與這個或任何其他第三方庫來獲得JSONObject。或者您可以重寫攔截器並評論使用JSONPopulator的代碼,但使用JSONUtil反序列化對象。

此外,手動創建/解析JSON數據時,您可能會發現this示例很有用。

0

如果你要發送的JSON對象,在它的多個鍵值對,你想在你的動作類這些鍵值,而產生的任何設置器/吸氣,

在Action類decleration,我們應該實現ServletRequestAware,我們應該重寫setServletRequest()方法,並設置HttpServletRequest的屬性

public class YourClass extends ActionSupport implements ServletRequestAware 

private HttpServletRequest request; 

@Override 
public void setServletRequest(HttpServletRequest request) { 
    this.request = request; 
} 

public HttpServletRequest getServletRequest() { 
    return this.request; 
} 

而且我們有針對性的功能,我們應該使用上述請求對象獲取參數(其名稱,因爲它是在設定json作爲關鍵):

public String fetchData() { 
    String key1Data = getServletRequest().getParameter("key1"); 
    String key2Data = getServletRequest().getParameter("key2"); 
    return SUCCESS; 
} 

如果您JSON對象應該具有的數據是這樣的:

var jsonData = {"key1": "Hello", "key2":"There"};