2013-07-30 59 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";