使用servlet返回json对象

时间:2013-07-30 20:31:44

标签: jquery json jsp servlets

我有一个servlet。它的工作原理如下 - 我发送action-name,servlet创建action-object,执行一些任务,然后返回字符串view作为结果 - 到我应该发送给用户的页面。 Servlet对doGETdoPost的工作方式相同。

    String name = getActionName(req);

    Action action = (Action) pico.getComponentInstance(name);

    String view = action.exec(req, resp);
    // router
    if (view.startsWith("redirect:")) {
        resp.sendRedirect(view.substring("redirect:".length(),
                view.length()));
    } else {
        getServletContext().getRequestDispatcher(
                "/" + view + ".jsp").forward(req, resp);
    } 

我有AjaxAction,我从请求获取值,从数据库获取对象,将其转换为json字符串。但是如何从行动中归还呢? Action返回string,表示应该发送用户的下一页。我将他发送到main页。

    String requestId = req.getParameter("requestId");
    Long id = Long.valueOf(requestId);
    Request item = requestDao.read(id); 
    String json = "";
    json = new Gson().toJson(item);

    resp.setContentType("application/json");
    resp.setCharacterEncoding("UTF-8");
    try {
        resp.getWriter().write(json);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return "main";

每当我更改<select>中的值(id = "re")时,我都会发送JSON对象请求。

   $("#re").change(function() {
        var $id = $('#re').val();
        $.get('AjaxAction.do', {
            requestId : $id
        }, function(respJSON) {
                            alert(respJSON);
            $.each(respJson, function(key, value) {
                $('#' + key).val(value);
            });
        });
    });

但{+ 1}}在#+键更改中都不会出现或出现值。所以似乎功能不起作用。 那么如何从Action中正确返回JSON对象? 我调试器alert创建了对象和AjaxAction

1 个答案:

答案 0 :(得分:0)

  1. return "main";更改为return null;
  2. 之后,您将能够在同一页面上获得ajax响应和alert();
  3. 如果需要,您可以通过document.location="anotherpage";
  4. 将用户重定向到另一个页面,而不是提醒