Как отправить ответ в сервлете на передний план? - PullRequest
0 голосов
/ 09 января 2012

Я написал сервлет что-то вроде этого

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 вызываетзадний конец, чтобы захватить список результатов.Итак, я написал сервлет и извлекаю информацию от пользователя и получаю результаты из слоя DAO.

Мой вопрос здесь заключается в том, как мне отправить этот список (resultAutoComplete) на передний конец сервлета?

Ответы [ 4 ]

2 голосов
/ 09 января 2012

Я ожидаю, что вы сериализируете это каким-то образом, чтобы клиент это понял. например возможно, используя JSON или аналогичный.

Замечу, что тип вашего ответа - text/html. Так почему бы просто не записать каждый элемент вашего списка в ваш Writer out , отделенный, скажем, элементом <li> (с соответствующими ему неупорядоченными / упорядоченными объектами списка)

0 голосов
/ 09 января 2012

Нет, 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);
0 голосов
/ 09 января 2012

Попробуйте это,

for (String str : resultAutoComplete)
                {
            out.println(str);
        }
0 голосов
/ 09 января 2012

Если сериализовать его в строку и записать в out ...

Если серьезно, я бы не стал кодировать на низком уровне спецификации сервлета.Для такого вызова return-this-pojo я бы использовал сервисные библиотеки RESTful Spring 3 или что-то подобное.

...