如何迭代List 并渲染JSF Facelets中的每个项目
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何迭代List 并渲染JSF Facelets中的每个项目相关的知识,希望对你有一定的参考价值。
我想知道如何在Facelet中显示下面获得的List<T>
:
public List<T> searchByString(String string) {
return getEntityManager().createNamedQuery("Userdetails.findByUsername").setParameter("username", "%" + string + "%").getResultList();
}
<h:dataTable>
会是一种合适的方式吗?
答案
你需要迭代它。 JSF 2提供了三个迭代组件。如果User
实体如下所示,
@Entity
public class User {
private @Id Long id;
private String username;
private String email;
private LocalDate birthdate;
// Add/generate getters+setters.
}
并且搜索结果被指定为bean的List<User> users
属性,可用作#{bean}
,
@Named @RequestScoped
public class Bean {
private List<User> users;
// Add/generate postconstruct+getter.
}
这里有一些基于它的例子:
<h:dataTable>
,一个生成html<table>
的UI组件。<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>
<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>
<c:forEach>
,一个在视图构建时运行而不是查看渲染时间的标记处理程序(这里的背景说明:JSTL in JSF2 Facelets... makes sense?),它也不会产生任何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>
See also:
- Java EE 6 tutorial - Adding components to a page - using
<h:dataTable>
- How and when should I load the model from database for h:dataTable
另一答案
您可以将List保存在类变量中,为其提供一个getter和(可能)setter。将searchByString
方法声明为void
并将其称为let(例如,您使用的是PrimeFaces):
<p:commandLink update="@form" process="@this" action="#{myBean.searchByString}">
为myBean:
public void searchByString(String string) {
userList = getEntityManager().createNamedQuery("Userdetails.findByUsername").setParameter("username", "%" + string + "%").getResultList();
}
如果您的桌子位于您刚刚更新的表格中,您可以在其中显示List
。
<p:dataTable var="user" value="#{myBean.userList}">
<p:column headerText="Name">
<h:outputText value="#{user.name}" />
</p:column>
</p:dataTable>
以上是关于如何迭代List 并渲染JSF Facelets中的每个项目的主要内容,如果未能解决你的问题,请参考以下文章