2012-04-07 16 views
0

fand ich this JSF Tutorial, das zeigt, wie JSF-Tabelle mit Paginierung erstellen undWie Tomahawk <t:saveState> und <t:dataList> Tags mit Standard-JSF-Tags ersetzen?

<%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%> 
<%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%> 
<%@taglib uri="http://myfaces.apache.org/tomahawk" prefix="t"%> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

<f:view> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
     <head> 
      <title>Effective datatable paging and sorting at DAO level</title> 
     </head> 
     <body> 
      <h:form id="form"> 

       <%-- The sortable datatable --%> 
       <h:dataTable value="#{myBean.dataList}" var="item"> 
        <h:column> 
         <f:facet name="header"> 
          <h:commandLink value="ID" actionListener="#{myBean.sort}"> 
           <f:attribute name="sortField" value="id" /> 
          </h:commandLink> 
         </f:facet> 
         <h:outputText value="#{item.id}" /> 
        </h:column> 
        <h:column> 
         <f:facet name="header"> 
          <h:commandLink value="Name" actionListener="#{myBean.sort}"> 
           <f:attribute name="sortField" value="name" /> 
          </h:commandLink> 
         </f:facet> 
         <h:outputText value="#{item.name}" /> 
        </h:column> 
        <h:column> 
         <f:facet name="header"> 
          <h:commandLink value="Value" actionListener="#{myBean.sort}"> 
           <f:attribute name="sortField" value="value" /> 
          </h:commandLink> 
         </f:facet> 
         <h:outputText value="#{item.value}" /> 
        </h:column> 
       </h:dataTable> 

       <%-- The paging buttons --%> 
       <h:commandButton value="first" action="#{myBean.pageFirst}" 
        disabled="#{myBean.firstRow == 0}" /> 
       <h:commandButton value="prev" action="#{myBean.pagePrevious}" 
        disabled="#{myBean.firstRow == 0}" /> 
       <h:commandButton value="next" action="#{myBean.pageNext}" 
        disabled="#{myBean.firstRow + myBean.rowsPerPage >= myBean.totalRows}" /> 
       <h:commandButton value="last" action="#{myBean.pageLast}" 
        disabled="#{myBean.firstRow + myBean.rowsPerPage >= myBean.totalRows}" /> 
       <h:outputText value="Page #{myBean.currentPage}/#{myBean.totalPages}" /> 
       <br /> 

       <%-- The paging links --%> 
       <t:dataList value="#{myBean.pages}" var="page"> 
        <h:commandLink value="#{page}" actionListener="#{myBean.page}" 
         rendered="#{page != myBean.currentPage}" /> 
        <h:outputText value="<b>#{page}</b>" escape="false" 
         rendered="#{page == myBean.currentPage}" /> 
       </t:dataList> 
       <br /> 

       <%-- Set rows per page --%> 
       <h:outputLabel for="rowsPerPage" value="Rows per page" /> 
       <h:inputText id="rowsPerPage" value="#{myBean.rowsPerPage}" size="3" maxlength="3" /> 
       <h:commandButton value="Set" action="#{myBean.pageFirst}" /> 
       <h:message for="rowsPerPage" errorStyle="color: red;" /> 

       <%-- Cache bean with data list, paging and sorting variables for next request --%> 
       <t:saveState value="#{myBean}" /> 
      </h:form> 
     </body> 
    </html> 
</f:view> 

Sortierung diese Tabelle ohne Tomahawk Bibliothek verwendet werden können? Ich möchte so viel wie möglich mit sauberem JSF arbeiten. Kann dieser Code nur mit Standard-JSF-Tags bearbeitet werden, ohne die Paginierung und Sortierung zu ändern?

Beste Wünsche

Antwort

3

Der alte Artikel auf JSF 1.x ausgerichtet ist und der Code soll verwendet werden, mit einer Anfrage Bohne scoped. Die <t:saveState> stellt sicher, dass die beanspruchte Anforderungs bean in der nächsten POST-Anforderung beibehalten wird, genau wie der neue JSF 2.x-Ansichtsbereich (der somit in Standard-JSF 1.x noch nicht vorhanden war). Der Sitzungsumfang ist keine Option, da dies zu nicht intuitivem Verhalten und "wtf" führen würde. Situationen, in denen der Endbenutzer dieselbe Seite in mehreren Browserfenstern/Tabs öffnet und somit jede anforderungsbasierte Aktion das Verhalten der gleichen Seite in dem anderen Fenster/Tab beeinflusst, wenn der Endbenutzer zwischen ihnen wechselt und aufforderungsbasierte Aktionen für sie aufruft .

Für JSF 2.x kann die <t:saveState> ersetzt werden, indem die Bean einfach in den Ansichtsbereich und nicht in den Anforderungsbereich verschoben wird, indem sie @ViewScoped markiert wird.

@ManagedBean 
@ViewScoped 
public class MyBean { 
    // ... 
} 

Beachten Sie auch, dass der Artikel die alte JSP-Ansichtstechnologie verwendet. Dies wurde von Facelets seit JSF 2.0 gefolgt. Sie möchten auch JSP durch Facelets ersetzen. Entfernen Sie diese JSP-Taglibs durch die üblichen XML-Namespacedeklarationen im Tag der obersten Ebene (<html>) und benennen Sie die Datei von .jsp in .xhtml um. Auf diese Weise können Sie <t:dataList> durch <ui:repeat> ersetzen, die in JSP nicht existiert.

<ui:repeat value="#{myBean.pages}" var="page"> 
    ... 
</ui:repeat> 
+1

Ok, ich verstehe und ich werde nur @ViewScoped in der Zukunft verwenden. Ich werde konkreter sein: Wie ich diesen Code http://pastebin.com/ExLrdX3u durch h Bibliotheks-Tags ersetzen kann - Ich möchte das t-Bibliotheks-Tag durch die h-Bibliothek ersetzen, ohne das Endergebnis zu ändern. –

+2

Oh, ich habe die '' vermisst. Ich habe die Antwort aktualisiert. – BalusC

+0

Kann ich mit ersetzen oder muss ich ein anderes Tag verwenden? –

Verwandte Themen