2016-01-21 115 views
1

在繼續之前,我發現幾年前還有一個類似的問題(Passing a List from Servlet to JSP)。我意識到可以設置我想要作爲會話屬性傳遞的列表,但出於好奇,我想知道是否可以使用PrintWriter對象將數據發回JSP頁面。使用PrintWriter對象將List對象從Java Servlet發送到JSP?

JSP

<script type="text/javascript"> 
     function getEngineSchemes(engineID) { 
      $.get('SchemeTypeServlet', { 
       action: "getSchemes", 
       engineID: engineID 
      }, 
      function(data, status){ 

      }).fail(function() { 
       alert("Error obtaining schemes for engine with engine id: " + engineID); 
      }); 
     } 
    </script> 
</body> 

的Servlet

@Override 
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    //Set type of response 
    response.setContentType("text/html"); 
    response.setCharacterEncoding("UTF-8"); 
    //get parameters that may be passed from client to determine which methods should be called 
    String action = request.getParameter("action"); 

    if(action.equalsIgnoreCase("getSchemesForEngine")) { 
     Integer engineID = Integer.parseInt(request.getParameter("engineID")); 
     List<String> schemeNames = getSchemeNamesForEngine(engineID); 

     response.getWriter(). //insert code to send object back to JSP 
     response.getWriter().flush(); 
    }  

選項

一個解決方案我認爲可能是合理的。將創建一個JSONObject和沿的

response.setContentType("application/json"); 
JSONObject json = new JSONObject(); 
    for(String name : schemeNames) { 
      json.put(engineID, name); 
     } 
    response.getWriter().write(json.toJSONString()); 
    response.getWriter().flush(); 

線的東西我沒有測試上面的代碼,但我只是想知道,如果這似乎是我的問題,或者最好的解決辦法我讓它過於複雜?也許我的問題有一個更簡單的解決方案。

回答

0

我覺得你的東西已經搞亂了。首先,您不能將文本或任何類型的數據從servlet發送到jsp。這樣做的正確方法是使用會話並使用response.sendRedirectRequestDispatcher.forward方法。但是這將忽略在servlet的Writer對象之前所做的任何調用。

+0

是的,您可以將數據從Servlet發回JSP頁面,因爲我已經這樣做了。在JSP文件中,您可以包含HTML和JavaScript,因此您可以使用JQuery.post(),它允許您指定一個Servlet將數據發佈到回調函數中,並在回調函數中使用,例如: ... }) (內容); });函數(數據)var content = data [ 你可以利用從Servlet獲得的結果填充html元素。 –