RichFaces - Iterationskomponente

In den vorherigen Kapiteln haben wir die verschiedenen Eingabe- und Ausgabekomponenten kennengelernt. In diesem Kapitel erfahren Sie, wie Sie verschiedene Datenstrukturen auf der Website durchlaufen.

<rich: dataTable>

Dieses Tag wird verwendet, um eine Tabelle als Ergebnis auf der Website zu rendern. Im folgenden Beispiel wird eine Betreff-Tabelle zusammen mit der Pro-Effizienz-Ebene gerendert.

<?xml version = '1.0' encoding = 'UTF-8' ?>    
<html xmlns = "http://www.w3.org/1999/xhtml"   
   xmlns:h = "http://java.sun.com/jsf/html"   
   xmlns:f = "http://java.sun.com/jsf/core"   
   xmlns:ui = "http://java.sun.com/jsf/facelets"   
   xmlns:a4j = "http://richfaces.org/a4j"   
   xmlns:rich = "http://richfaces.org/rich">   
   
   <h:head>   
      <title>Rich Data Table</title>   
   </h:head>   
    
   <h:body>   
      <h:form>   
         <rich:dataTable value = "#{subject.subjectListObj}" var = "record" >   
            <f:facet name = "header">   
               <h:outputText value = "My Profile" />   
            </f:facet>   
            
            <rich:column>   
               <f:facet name = "header">Subject Name</f:facet>   
               <h:outputText value = "#{record.subjectName}"/> 
            </rich:column> 
            
            <rich:column>    
               <f:facet name = "header">efficiency Level</f:facet>   
               <h:outputText value = "#{record.efficiency}"/> 
            </rich:column>   
         </rich:dataTable>
      </h:form>   
   </h:body>
   
</html>

Wir müssen unsere subject.java entsprechend ändern, um die Liste zu rendern. Es folgt ein Beispiel für subject.java.

import java.util.ArrayList; 
import java.util.List; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ManagedProperty; 
import javax.faces.bean.RequestScoped;   

@ManagedBean 
@RequestScoped 

public class Subject { 
   String SubjectName; 
   private String efficiency; 
   
   private List<Subject> subjectListObj=new ArrayList<>(); 
      public Subject() { 
   }  
   public Subject(String SubjectName,String efficiency ) { 
      this.SubjectName = SubjectName; 
      this.efficiency= efficiency; 
   } 
   public String getSubjectName() { 
      return SubjectName; 
   } 
   public void setSubjectName(String SubjectName) { 
      this.SubjectName = SubjectName; 
   } 
   public List<Subject> getSubjectListObj() {
      subjectListObj.add(new Subject("JAVA","Expert"));   
      subjectListObj.add(new Subject("DOTNET","NA"));   
      subjectListObj.add(new Subject("JAVA Script","Expert"));   
      subjectListObj.add(new Subject("Web Service","Expert"));   
      subjectListObj.add(new Subject("Consulting","Expert"));   
      return subjectListObj; 
   } 
   public void setSubjectListObj(List<Subject> subjectListObj) { 
      this.subjectListObj = subjectListObj; 
   } 
   public String getEfficiency() { 
      return efficiency; 
   } 
   public void setEfficiency(String efficiency) { 
      this.efficiency = efficiency; 
   } 
}

Das obige Beispiel generiert die folgende Ausgabe im Browser.

<rich: dataDefinitionList>

Dies ist das Tag, mit dem die Datendefinition aus einem Modell generiert wird. Dieses Tag wird von JBoss seit der Erfindung von RichFaces 4 nicht mehr unterstützt. Wenn Sie weiterhin RichFaces 3 verwenden, können Sie dieses Tag folgendermaßen verwenden.

<rich:dataDefinitionList var = "car" value = "#{dataTableScrollerBean.allCars}" 
   rows = "5" first = "4" title = "Cars">  
   
   <f:facet name = "term">  
      <h:outputText value = "#{car.make} #{car.model}"></h:outputText>  
   </f:facet>  
   
   <h:outputText value = "Price:" styleClass = "label"></h:outputText>  
   <h:outputText value = "#{car.price}" /><br/>  
   <h:outputText value = "Mileage:" styleClass = "label"></h:outputText>  
   <h:outputText value = "#{car.mileage}" /><br/>  
</rich:dataDefinitionList>

Im obigen Beispiel ist "dataTableScrollerBean" eine Java-Klasse, mit der verschiedene Werte des Fahrzeugs generiert werden. Dies ähnelt dem vorherigen Tag, in dem wir eine Reihe von Objektwerten mit dem Tag <datatable> gefüllt haben.

<rich: dataOrderedList>

RichFaces 4 hat eine breite Moderation von RichFaces 3 entwickelt. <DataOrderedList> ist ein Tag, mit dem eine Liste in geordneter Weise gerendert wird. Auch dies wird in RichFaces 4 unterdrückt, da die Reihenfolge eines Objekts oder einer Liste viel einfacher und weniger zeitaufwendig ist, wenn dies in Java erfolgt. Wenn Ihre Anwendung RichFaces 3 verwendet, können Sie dieses Tag folgendermaßen verwenden.

<rich:panel style = "width:500px"> 
   <f:facet name = "header"> 
      Using rich:dataOrderedList 
   </f:facet> 
   
   <rich:dataOrderedList value = "#{airlinesBean.airlines}" var = "air"> 
      #{air.name}, #{air.code} 
   </rich:dataOrderedList> 
</rich:panel>

Im obigen Beispiel ist "airlinesBean" eine Java-Bean-Klasse mit einer Methode namens "airlinesBean ()". Diese Methode gibt ein Objekt vom Typ "Luft" zurück. Später können wir dieses Luftobjekt verwenden, um verschiedene Eigenschaften in einem Tabellenformat zu füllen.

<rich: dataList>

Wie der Tag-Name andeutet, wird dieses Tag verwendet, um eine ungeordnete Liste in den Browser zu rendern. Wie <orderedList> wird dieses Tag jedoch auch in der neuesten Version von RichFaces unterdrückt. Mit den Tags <a4j: Repeat> und <rich: dataTable> können wir auf einfache Weise eine Liste in den Browser rendern.

<a4j:repeat value = "#{managedBean.subjectList}" var = "sub"> 
   <h:outputText value = "#{sub}"/>   
</a4j:repeat>

Im obigen Beispiel rendern wir eine Liste, die eine Ausgabe der Methode "subjectList ()" ist. Wenn Ihre Anwendung in RichFaces 3 erstellt wurde, können Sie dieses Tag wie folgt verwenden.

<rich:panel style = "width:500px"> 
   <f:facet name = "header"> 
      Using rich:dataList 
   </f:facet> 
   
   <rich:dataList value = "#{airlinesBean.airlines}" var = "air"> 
      #{air.name}, #{air.code} 
   </rich:dataList>
</rich:panel>

<rich: dataGrid>

Mit dem Tag <datatable> können Sie eine Liste als Tabelle rendern. Mit <dataGrid> können Sie jedoch ein Objekt oder eine Liste rendern. Ändern Sie im vorherigen Beispiel von <rich: datatable> einfach die xhtml-Seite wie folgt und sehen Sie, was die Ausgabe derselben ist.

<?xml version = '1.0' encoding = 'UTF-8' ?>    
<html xmlns = "http://www.w3.org/1999/xhtml"   
   xmlns:h = "http://java.sun.com/jsf/html"   
   xmlns:f = "http://java.sun.com/jsf/core"   
   xmlns:ui = "http://java.sun.com/jsf/facelets"   
   xmlns:a4j = "http://richfaces.org/a4j"   
   xmlns:rich = "http://richfaces.org/rich">   
   
   <h:head>   
      <title>Rich Data Table</title>   
   </h:head>   
    
   <h:body>   
      <h:form>   
         <rich:panel> 
            <rich:dataGrid value = "#{subject.subjectListObj}" var = "record" 
               columns = "2" elements = "4" first = "1" >   
               
               <f:facet name = "header">   
                  <h:outputText value = "My Profile" />   
               </f:facet>   
               
               <rich:panel> 
                  <rich:column>   
                     <f:facet name = "header">Subject Name</f:facet>   
                     <h:outputText value = "#{record.subjectName}"/> 
                  </rich:column>  
                  
                  <rich:column>    
                     <f:facet name = "header">efficiency Level</f:facet>   
                     <h:outputText value = "#{record.efficiency}"/> 
                  </rich:column> 
               </rich:panel> 
               
            </rich:dataGrid>  
         </rich:panel> 
      </h:form>   
   </h:body> 
   
</html>

Der obige Code liefert die folgende Ausgabe im Browser.

<rich: datascroller>

Dieses Tag hilft beim Erstellen einer Bildlaufleiste beim Auffüllen der Tabellendaten. Es ist der Paginierungsfunktionalität des JSF ziemlich ähnlich. Ändern Sie das vorherige dataTable-Beispiel folgendermaßen.

<?xml version = '1.0' encoding = 'UTF-8' ?>    
<html xmlns = "http://www.w3.org/1999/xhtml"   
   xmlns:h = "http://java.sun.com/jsf/html"   
   xmlns:f = "http://java.sun.com/jsf/core"   
   xmlns:ui = "http://java.sun.com/jsf/facelets"   
   xmlns:a4j = "http://richfaces.org/a4j"   
   xmlns:rich = "http://richfaces.org/rich">   
   
   <h:head>
      <title>Rich Data Table</title>   
   </h:head>   
    
   <h:body>   
      <h:form>   
         <rich:dataTable value = "#{subject.subjectListObj}" var = "record" 
            rows = "3" id = "MyTable">   
            
            <f:facet name = "header">   
               <h:outputText value = "My Profile"/>   
            </f:facet>   
            
            <rich:column>   
               <f:facet name = "header">Subject Name</f:facet>   
               <h:outputText value = "#{record.subjectName}"/> 
            </rich:column> 
            
            <rich:column>    
               <f:facet name = "header">efficiency Level</f:facet>   
               <h:outputText value = "#{record.efficiency}"/> 
            </rich:column>   
         </rich:dataTable> 
         
         <rich:dataScroller for = "MyTable" maxPages = "3">   
            <f:facet name = "first">   
               <h:outputText value = "1" />   
            </f:facet>   
            
            <f:facet name = "last">   
               <h:outputText value = "eof" />   
            </f:facet>   
         </rich:dataScroller> 
      </h:form>   
   </h:body>
   
</html>

Im obigen Beispiel können Sie Ihren Stil für ein gutes Erscheinungsbild hinzufügen. Wir haben separate <dataScroller> -Tags mit unterschiedlichen Facettenwerten implementiert. Es folgt die Ausgabe der obigen Datei. Aktualisieren Sie das Attribut style pure, um die Tabelle und den Daten-Scroller zu synchronisieren.