1

Extjs4.1 で簡単なフォームを作成しました。

リクエストを Struts2 フレームワークに送信しています。Strtus2JSON プラグインを使用して、レスポンスを受信する必要があります。残念ながら、応答は null です。

アクションクラス

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>

なぜ私が応答を null として受け取っているのか誰にもわかりますか?

4

3 に答える 3

1

構成ファイル struts.xml で、次を使用してください。

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

それ以外の

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

上記の変更を行った後、プロジェクトで以前に同じ問題に直面していました。

于 2013-06-06T08:40:56.687 に答える
1

次のような resultJSONobj のゲッターはありますか?:

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

次のように、名前空間をパッケージに追加します。

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

そして、何かが変わったかどうかを確認してください...


編集

ガイドに記載されているように、

  • 「一時」フィールドはシリアル化されていません
  • 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 の設定を次のように変更します。

<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"
   }
}
于 2012-12-17T13:51:40.153 に答える
0

struts.xmlファイルに欠けているものがいくつかあります。結果が成功した後、どこに行きますか?executeメソッドの外部およびアクションクラスの内部にjsonオブジェクトインスタンスを作成します。Struts2JSONプラグインは、アクションクラス内のすべてのアクション変数をシリアル化します。アクションクラスでJSONobjectを宣言し、実際にexecute内で作成したため、JSONがそれを取得している可能性があります{}。

置く

private JSONObject resultJSONobj = new JSONObject();

アクションクラスの内部と外部の実行と確認では、機能する可能性があります。詳細については、 http://struts.apache.org/2.2.3/docs/json-plugin.htmlにアクセスしてください。

于 2012-12-18T06:18:08.980 に答える