Рендеринг HTML-таблицы с помощью JSF - PullRequest
1 голос
/ 29 июля 2010

Мне нужно визуализировать таблицу HTML из сервлета в ответ на запрос AJAX. Мне интересно, как лучше это сделать? Я исследовал с помощью javax.faces.component.html.HtmlDataTable. Один из вопросов, которые у меня возникли относительно этого метода, заключается в том, как отобразить HTML после заполнения таблицы. Судя по всему, требуется FacesContext.

Есть идеи?

1 Ответ

2 голосов
/ 29 июля 2010

JSF - это не то, что вы ищете.Это основанная на компонентах инфраструктура MVC.Просто сделайте это простым и уродливым способом в простом цикле в сервлете:

writer.write("<table>");
for (Item item : items) {
    writer.write("<tr>");
    writer.write(String.format("<td>%s</td>", item.getFoo()));
    writer.write(String.format("<td>%s</td>", item.getBar()));
    writer.write("</tr>");
}
writer.write("</table>");

Или сохраните его как атрибут запроса и перешлите к JSP

request.setAttribute("items", items);
request.getRequestDispatcher("items.jsp").forward(request, response);

, который в свою очередь в основномсодержит следующее:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<table>
    <c:forEach items="${items}" var="item">
        <tr>
            <tr>${item.foo}</td>
            <tr>${item.bar}</td>
        </tr>
    </c:forEach>
</table>

Или, скорее, ищите другой и более гибкий формат данных, такой как JSON , чтобы у клиента была свобода его рендеринга.Вот пример, который использует Google Gson .

writer.write(new Gson().toJson(items));

, который можно отобразить в таблицу с помощью jQuery следующим образом:

$.getJSON('json/items', function(items) {
    var table = $('#someelement').append('<table>');
    $(items).each(function(i, item) {
        var row = table.append('<tr>');
        row.append('<td>').text(item.foo);
        row.append('<td>').text(item.bar);
    });
});

См. Также:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...