使用JSF渲染HTML表

时间:2010-07-29 00:58:15

标签: jsf servlets

我需要从Servlet呈现HTML表,以响应AJAX请求。我想知道最好的方法是什么?我已经探索过使用javax.faces.component.html.HtmlDataTable。我对此方法的一个问题是如何在填充表格后呈现HTML。从它的外观来看,需要一个FacesContext。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

JSF不是你想要的。它是基于组件的MVC框架。只需在servlet的简单循环中以简单和丑陋的方式执行它:

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);
    });
});

另见: