我写了一个像这样的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中的前端?
答案 0 :(得分:2)
我希望你能以某种方式将其序列化,以便客户理解它。例如也许使用JSON或类似的。
我注意到您的回复内容类型为text/html
。那么为什么不简单地将列表中的每个元素写入Writer
out ,由(例如)<li>
元素分隔(使用相应的无序/订单列表实体)
答案 1 :(得分:0)
将其序列化为String并将其写入out
...
说真的,我不会在Servlet规范的低级代码。对于这种返回 - 这个pojo调用我会使用Spring 3's RESTful service libraries或类似的东西。
答案 2 :(得分:0)
试试这个,
for (String str : resultAutoComplete)
{
out.println(str);
}
答案 3 :(得分: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);