2012-12-17 22 views
1

我在Extjs4.1中創建了一個簡單的表單。JSON和Struts2的結果爲null

我發送請求到Struts2框架,並使用Strtus2JSON插件,我必須得到響應。但不幸的是,答覆是空的。

Action類

public String execute()throws Exception{ 
    Employee emp = new Employee(); 
    emp.setAddress(getAddress()); 
    emp.setDepartment(getDepartment()); 
    emp.setName(getName()); 
    emp.setSalary(getSalary()); 
    AddEmployeeService empService = new AddEmployeeService(); 
    boolean flag = empService.addEmployee(emp); 
    resultJSONobj = new JSONObject(); 
    if(flag == true) 
     resultJSONobj.put("success","Inserted Successfully"); 
    else 
     resultJSONobj.put("failure","An error occured"); 
    System.out.println(resultJSONobj); 
    return SUCCESS; 

} 

struts.xml的

<struts> 
    <package name="default" extends="struts-default, json-default"> 
     <action name="AddEmp" class = "actions.AddEmpAction"> 
      <result name = "success" type="json"> 
       <param name ="root">resultJSONobj</param> 
      </result>  
     </action> 
    </package>   
</struts> 

誰能告訴爲什麼IAM得到響應爲空?

回答

1

你有一個getter爲resultJSONobj這樣?:

public JSONObject getResultJSONobj(){ 
    return this.resultJSONobj; 
} 

命名空間添加到您的包裹,像這樣:

<package name="default" namespace="/" extends="struts-default, json-default"> 

看看是否發生了變化...


編輯

由於described in the guide

  • '短暫' 字段沒有序列號
  • 字段,而getter方法是沒有序列號

嘗試這樣的:

使用地圖而不是你的JSONObject。不是每一節課都接受,我不知道你的JSONObject是可序列化(你實現串行你聲明的serialVersionUID等?)

private Map resultJSONobj = new HashMap(); //instantiated at class level 

// accessors 
public Map getResultJSONobj() { 
    return resultJSONobj; 
} 
public void setResultJSONobj(Map resultJSONobj) { 
    this.resultJSONobj = resultJSONobj; 
} 

//... 

public String execute()throws Exception{ 
    Employee emp = new Employee(); 
    emp.setAddress(getAddress()); 
    emp.setDepartment(getDepartment()); 
    emp.setName(getName()); 
    emp.setSalary(getSalary()); 
    AddEmployeeService empService = new AddEmployeeService(); 
    boolean flag = empService.addEmployee(emp); 

    if(flag == true) 
     resultJSONobj.put("success","Inserted Successfully"); 
    else 
     resultJSONobj.put("failure","An error occured"); 
    System.out.println(resultJSONobj); 
    return SUCCESS; 

} 

並改變支柱的配置是這樣的:

<struts> 
    <package name="default" extends="struts-default, json-default"> 

     <action name="AddEmp" class = "actions.AddEmpAction"> 
      <result name="success" type="json" /> 
     </action> 
    </package> 

</struts> 

成功沒有必要,但爲了更清晰的代碼,您可以隨時刪除它。

現在,你應該看到這是結果(如果你沒有任何其他的吸氣劑):

{ 
    "resultJSONobj": { 
     "success":"Inserted Successfully" 
    } 
} 

{ 
    "resultJSONobj": { 
     "failure":"An error occured" 
    } 
} 
+0

我已經爲JSONObject添加了getters和setter。但現在它顯示結果爲「{}」,即使我已經在JSONObject中添加了一個值。 –

0

有幾件事情在你的struts.xml文件丟失。結果成功後,你要去哪裏? 在執行方法和action類內部創建json對象實例。 Struts2JSON插件序列化動作類中的所有動作變量。這可能是因爲你只在action類中聲明瞭JSONobject並且在execute中實際創建了JSONobject,所以JSON可能會得到它{}。

private JSONObject resultJSONobj = new JSONObject(); 

動作類內外執行看看,它可能工作。 欲瞭解更多信息,你可以去這裏 http://struts.apache.org/2.2.3/docs/json-plugin.html

1

在配置文件struts.xml中,請使用

<param name="includeProperties">resultJSONobj.*</param> 

而不是

<param name="includeProperties">resultJSONobj</param> 

我之前面臨着同樣的問題,在我的項目,我做了上述改變後,它的工作。