2

Springs MVCからJSONオブジェクトを送信して、HTMLページでJavaScriptオブジェクトに変換するにはどうすればよいかという質問があります。

従来の方法で行います。以下は、リクエスト属性を設定してJSPページに転送するJavaサーブレットのスニペットです。

   JSONObject jsonObj = new JSONObject();
   jsonObj.put("name","test");
   jsonObj.put("age",24);
   request.setAttribute("jsonObj",jsonObj);
   request.getRequestDispatcher("test.jsp").forward(request,response);

JSPでは、次のように取得します。

   <script type="text/javascript">
    var jsonObj =<%=request.getAttribute("jsonObj"); %>;
    alert("name = "+jsonObj.name+" ; age = "+jsonObj.age); // This will output name and age from the JSON Object
   </script>

では、SpringsMVCで同じことをどのように行うことができるかを尋ねる必要があります。DispatcherサーブレットからJSONObjectを送信し、JSPページでJSオブジェクトに変換するにはどうすればよいですか?

4

4 に答える 4

4

ObjectMapperを使用してこれを行う簡単な方法。オブジェクトからJSON文字列を作成します。そして、あなたはあなたのview/jspに送ることができます。

私はこれを行うコントローラーの小さな例を示します(切り取っただけです)。

@Controller
public class UsersSettingsController {

    @Autowired
    UserSettingsDefaultService userSettingsService;


    @RequestMapping(value="/userSettings/dynamic/userSettings", method=RequestMethod.GET)
    public ModelAndView get() throws Exception {
        ModelAndView mav = new ModelAndView();
        ObjectMapper mapper = new ObjectMapper();


    User user = (User)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
    UserSettings userSet = userSettingsService.getUserSettingsByUser(user);

    mav.addObject("userSettingsJSON", mapper.writeValueAsString(userSet));

    mav.setViewName("userSettings/dynamic/filter");


        return mav;
    }
}

または、もちろん、例で行ったように、ContollerでJSONオブジェクトを段階的に作成できます。次に、マッパーは必要ありません。文字列をビューに送信するだけです。

JSPでは、次のようなjson文字列をJS変数にロードします。

var jsonString = '${userSettingsJSON}';

JSON文字列から要素を取得または解析するには、http ://www.json.org/js.htmlを参照してください。
私はKnockOutFrameworkのファンです。

于 2012-11-05T08:41:51.970 に答える
2

私はあなたがajax(例えばjquery)を使うべきだと思います、以下は春のMVCです

@RequestMapping(value = "/admin/new/list", method = RequestMethod.GET)
@ResponseBody
public List<News> list()
{
  return newsDao.findAll();
}

また、jspページでは、ajax util(jqueryなど)を使用できます。

$.ajax({
            type: "GET",
            url: '<c:url value="/admin/new/list"/>',
            cache:false,
            dataType :'json',
            success: function(data){
                 alert(data);               
           }
    });

データはjsonオブジェクトです上記が必要かどうかわかりません

于 2012-11-05T09:33:14.253 に答える
0

これを行うためのはるかに簡単な方法は、MavenにJacksonの依存関係を含め、@ ResponseBodyを使用して、手動で操作を記述しなくても、オブジェクトのJSON表現を返すことです。

以下の例を見てください。JSONコードに翻訳を書く必要はありません。

http://www.mkyong.com/spring-mvc/spring-3-mvc-and-json-example/

于 2012-11-05T09:22:38.110 に答える
0

要件に応じて、データ型としてJSONを使用したAJAX呼び出しを使用することをお勧めします。

例えば ​​:

$.ajax({
                    url: "getFormatIdDescMap?compId="+compId,
                    global: false,
                    type: "POST",
                    dataType:"json",
                    contanttype:'text/json',
                    async:false,
                    error:function(){
                        alert("Error during retrieving the foramt ID List");
                    },
                    success: function(data){                                                
                        //REMOVE ALL THE OLD VALUES OF FORMAT DROP DOWN
                        removeDropDownVals('formatList');

                        var optn;
                        for(var index=0;index<data.formatKeys.length;index++){
                            optn = document.createElement("option");
                            document.getElementById("formatList").options.add(optn);
                            optn.text =data.formatDescs[index];
                            optn.value=data.formatKeys[index];  
                        }
                    }
                });

            });

上記のコードでは、会社IDに基づいてフォーマットの新しいリストを準備しています。応答を繰り返すことができます。

要件に応じて応答テキストが表示されます。ただし、ここで、応答でjson配列を取得している場合は、そのデータが.. [1,2,3]のように角かっこで囲まれていることに注意してください。また、JSONオブジェクトで応答を取得している場合は、中かっこで表示されます。 {"data"、[1,2,3]}のような中かっこ。

于 2012-11-05T10:30:47.220 に答える