簡體   English   中英

如何遍歷列表 <T> 並在JSF Facelets中渲染每個項目

[英]How iterate over List<T> and render each item in 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.
}

以下是一些基於此的示例:

  1. <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> 
  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> 
  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> 

也可以看看:

您可以將List保存在一個類變量中,給它一個getter和(也許)一個setter。 searchByString方法聲明為void ,並用a進行調用(假設您使用的是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>  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM