В предыдущих главах мы узнали о различных компонентах ввода и вывода. В этой главе мы узнаем, как перебирать различные структуры данных на сайте.
<Богатые: DataTable>
Этот тег используется для отображения таблицы в результате на веб-сайте. В следующем примере мы будем отображать предметную таблицу вместе с уровнем эффективности.
<?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>
Нам нужно изменить наш subject.java соответственно, чтобы отобразить список. Ниже приведен пример файла 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; } }
Приведенный выше пример сгенерирует следующий вывод в браузере.
<rich: dataDefinitionList>
Это тег, используемый для генерации определения данных из модели. Этот тег не поддерживается JBoss с момента изобретения RichFaces 4. Если вы все еще используете RichFaces 3, вы можете использовать этот тег следующим образом.
<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>
В приведенном выше примере «dataTableScrollerBean» — это класс Java, который используется для генерации различных значений автомобиля. Это похоже на предыдущий тег, где мы заполнили группу значений объекта с помощью тега <datatable>.
<Богатые: dataOrderedList>
RichFaces 4 получил широкую модерацию от RichFaces 3. <dataOrderedList> — это тег, используемый для визуализации списка упорядоченным образом. Это также подавляется в RichFaces 4, потому что упорядочение объекта или списка намного проще и занимает меньше времени, если это делается в Java. Если ваше приложение использует RichFaces 3, вы можете использовать этот тег следующим образом.
<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>
В приведенном выше примере «AirlinesBean» — это класс Java-бина с методом с именем «AirlinesBean ()». Этот метод возвращает объект типа «воздух». Позже мы можем использовать этот объект air для заполнения различных свойств в формате таблицы.
<Богатые: DataList>
Как следует из названия тега, этот тег будет использоваться для отображения неупорядоченного списка в браузере. Однако, как и <orderList>, этот тег также подавлен в последней версии RichFaces. Мы можем легко отобразить список в браузере, используя теги <a4j: Repeat> и <rich: dataTable> следующим образом.
<a4j:repeat value = "#{managedBean.subjectList}" var = "sub"> <h:outputText value = "#{sub}"/> </a4j:repeat>
В приведенном выше примере мы отображаем список, который является результатом метода с именем subjectList (). Если ваше приложение встроено в RichFaces 3, вы можете использовать этот тег следующим образом.
<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>
<Богатые: DataGrid>
Используя тег <datatable>, вы сможете отобразить список в виде таблицы, однако <dataGrid> поможет вам отобразить объект или список. В предыдущем примере <rich: datatable> просто измените страницу xhtml, как показано ниже, и посмотрите, что из этого получится.
<?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>
Приведенный выше фрагмент кода выдаст следующий вывод в браузере.
<Богатые: datascroller>
Этот тег помогает создать полосу прокрутки при заполнении данных таблицы. Это очень похоже на функциональность пагинации JSF. Измените предыдущий пример dataTable следующим образом.
<?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>
В приведенном выше примере вы можете добавить свой стиль для хорошего внешнего вида. Мы реализовали отдельные теги <dataScroller> с другим значением фасета. Ниже будет вывод вышеуказанного файла. Обновите атрибут sheer стиля, чтобы синхронизировать таблицу и прокрутку данных.