0

私がしたいこと:

  • ユーザーは、ユーザーの検索、新規ユーザーの登録など、実行するアクションの選択肢のリストを求められます。私の考えでは、ユーザーが選択肢の 1 つをクリックして選択すると、JQuery を使用して AJAX 呼び出しがトリガーされ、メソッドが実行されて JSONResponse が返されます。

JSONResponse は、次のように、文字列としての状態とオブジェクトとしての結果の 2 つの変数を持つ単純なオブジェクトです。

public class JSONResponse {
private String status = null;
private Object result = null;


public String getStatus() {
    return status;
}
public void setStatus(String status) {
    this.status = status;
}
public Object getResult() {
    return result;
}
public void setResult(Object result) {
    this.result = result;
}       
}

ただし、この応答に ModelAndView を返したい場合があります。たとえば、ユーザーがユーザーを検索すると、アプリケーションはそのユーザーを検索し、可能なユーザーのリストを含む ModelAndView を返します。これを実現する 1 つの方法は、ModelAndView を String としてレンダリングし、結果として JSONResponse オブジェクトに入れることです。問題は、ModelAndView を String としてレンダリングして JSONReponse に入れるにはどうすればよいかということです。

PS: Tomcat 7、JDK 6、Spring MVC 3.0 と Tiles 2、Jackson (Java オブジェクトを JSON に変換するため) を使用しています。

4

2 に答える 2

1

必要に応じて ModelAndView を返すことができます。それ以外の場合は、応答ストリームに書き込みます。

public ModelAndView getSomething(HttpServletResponse response) { 
    // perform your logic

    if(obj returned must be a json) {
        try {
              new MappingJacksonHttpMessageConverter().write(obj, MediaType.APPLICATION_JSON, new ServletServerHttpResponse(response));
        } catch(Exception e) {
              logger.error("Error while serializing to JSON string.");
        }

        return null;
    } else {
        return new ModelAndView("yourview");
    }
}
于 2012-04-12T21:25:04.220 に答える
0

あなたの質問から私が理解しているのは、モデルとビューを使用して検索リストを渡すため、jsonを返す必要がある場合と、モデルとビューを返す必要がある場合です。理想的には、これら2つのことを異なるメソッドで処理する必要がありますが、同じメソッドで処理する場合は、jsonデータを返すことができるように、メソッドはModelAndViewではなくStringを返す必要があります。そして、送信したい検索リストをセッションに入れると、JSPページに表示されます(セッションスコープのため)。

メソッドは次のようになります。

public @ResponseBody
String methodName(HttpServletRequest request) {


       if(jsondata){ //Wants to send json data
       return jsonFinalData.toString();
       }else{
       //store search list in session
        return view_name;   
}
于 2012-04-13T10:33:06.940 に答える