0

我写了一个类似这样的Servlet

public class ServletUtil extends HttpServlet {

private static final long serialVersionUID = 1571172240732862415L;

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    String acInfo = request.getQueryString();
    someDao dao = new someDao();
     ArrayList<String> resultAutoComplete=dao.someResults(acInfo);
    out.close();
}

}

我在前端有一个自动完成的对象/向导,当用户输入它时,它正在对后端进行 Ajax 调用以获取结果列表。所以我编写了一个 Servlet,我正在提取用户输入并从 DAO 层获取我的结果。

我的问题是我应该如何将此列表(resultAutoComplete)发送到 Servlet 中的前端?

4

4 回答 4

2

我希望您以某种方式将其序列化,以便客户理解它。例如,也许使用JSON或类似的。

我注意到您的响应内容类型是text/html. 那么为什么不简单地将列表中的每个元素写入您的Writer out,并由(例如)一个<li>元素分隔(周围有适当的无序/有序列表实体)

于 2012-01-09T18:09:54.320 回答
0

通过将其序列化为字符串并将其写入out...

不过说真的,我不会在低级别的 Servlet 规范中编码。对于这种 return-this-pojo 调用,我将使用Spring 3 的 RESTful 服务库或类似的东西。

于 2012-01-09T18:09:58.733 回答
0

试试这个,

for (String str : resultAutoComplete)
                {
            out.println(str);
        }
于 2012-01-09T18:26:43.420 回答
0

没有json!而不是通过javascript中的列表,返回一个完整的<li>列表并替换。这样做innerHTML的原因是为了提供更好的性能。<ul>除非您想做更灵活的事情,否则将事情留给后端。

在做json的时候,你必须将字符串解析成json对象,然后循环生成html,这只是一个额外的步骤。保持简单,另外,解析字符串可能代价高昂。

如果您不遍历列表而是执行out.println列表对象,您可能会看到地址。另外,你需要生成html,所以:

StringBuilder sb = new StringBuilder();
for(String option: options){
sb.append("<li>").append(option).append("</li>");
}
out.println(sb);
于 2012-01-09T18:32:42.117 回答