2013-07-30 153 views
0

我有一个servlet。它像这样工作 - 我发送操作名称,servlet创建操作对象,执行一些任务,然后返回字符串view作为结果 - 我应该发送给用户的页面。 Servlet的工作原理与doGETdoPost相同。使用servlet返回json对象

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返回字符串,代表应该发送用户的下一个页面。我把他送到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); 
      }); 
     }); 
    }); 

但是#alert都没有出现,也没有值#+键的变化。所以看起来功能不起作用。 那么如何从Action中正确返回JSON对象? 我调试器AjaxAction创建对象和return "main";

回答

0
  1. 变化return "main";return null;
  2. 那之后,你就能够获得Ajax响应,并在同一页上的警报();
  3. 取代提醒,您可以将用户重定向到另一个页面,如果需要做document.location="anotherpage";