2016-01-21 118 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元素。 –