如何遍历List <T>并渲染JSF Facelets中的每个项目

use*_*913 2 jsf list facelets data-presentation

我想知道如何List<T>在Facelet中显示如下所示:

public List<T> searchByString(String string) {
    return getEntityManager().createNamedQuery("Userdetails.findByUsername").setParameter("username", "%" + string + "%").getResultList();
}
Run Code Online (Sandbox Code Playgroud)

会<h:dataTable>是一个合适的方式吗?

Bal*_*usC 12

你需要迭代它.JSF 2提供了三个迭代组件.如果User实体如下所示,

@Entity
public class User {
    private @Id Long id;
    private String username;
    private String email;
    private LocalDate birthdate;
    // Add/generate getters+setters.
}
Run Code Online (Sandbox Code Playgroud)

并且搜索结果被指定为List<User> usersbean 的属性,可用作#{bean},

@Named @RequestScoped
public class Bean {
    private List<User> users;
    // Add/generate postconstruct+getter.
}
Run Code Online (Sandbox Code Playgroud)

这里有一些基于它的例子:

  1. <h:dataTable>,一个生成HTML的UI组件<table>.

    <h:dataTable value="#{bean.users}" var="user">
        <h:column>#{user.id}</h:column>
        <h:column>#{user.username}</h:column>
        <h:column><a href="mailto:#{user.email}">#{user.email}</a></h:column>
        <h:column>#{user.birthdate}</h:column>
    </h:dataTable>
    
    Run Code Online (Sandbox Code Playgroud)
  2. <ui:repeat>,一个不生成HTML标记的UI组件(因此,您必须自己以所需的方式编写所有HTML,这可以很容易地更改为例如<ul><li>,或<dl><dt><dd>,或<div><span>等):

    <table>
        <ui:repeat value="#{bean.users}" var="user">
            <tr>
                <td>#{user.id}</td>
                <td>#{user.username}</td>
                <td><a href="mailto:#{user.email}">#{user.email}</a></td>
                <td>#{user.birthdate}</td>
            </td>
        </ui:repeat>
    </table>
    
    Run Code Online (Sandbox Code Playgroud)
  3. <c:forEach>,一个在视图构建时运行而不是查看渲染时间的标记处理程序(这里的背景说明:JSF2 Facelets中的JSTL有意义吗?),它也不会产生任何HTML标记:

    <table>
        <c:forEach items="#{bean.users}" var="user">
            <tr>
                <td>#{user.id}</td>
                <td>#{user.username}</td>
                <td><a href="mailto:#{user.email}">#{user.email}</a></td>
                <td>#{user.birthdate}</td>
            </td>
        </c:forEach>
    </table>
    
    Run Code Online (Sandbox Code Playgroud)

也可以看看: