2012-04-07 76 views
0

私は改ページとJSFのテーブルを作成する方法を示しthis JSFチュートリアルを発見し、Tomahawk <t:saveState>と<t:dataList>タグを標準のJSFタグで置き換えるにはどうすればいいですか?

<%@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> 

をソートするには、このテーブルはTomahawkライブラリなしで使用することはできますか?私は可能な限りクリーンなJSFを使いたいですか?このコードは、ページ番号とソートを変更せずに標準のJSFタグだけで編集できますか?

ベストは古い記事はJSF 1.xの上で目標とされていることを

答えて

3

を希望し、コードは、要求がBeanをスコープで使用することを意図しています。 <t:saveState>は、新しいJSF 2.xビュースコープとまったく同じように、リクエストスコープBeanが次のPOSTリクエストで保持されるようにします(したがって、標準のJSF 1.xではまだ存在しませんでした)。セッションスコープは、直感的ではない動作につながり、 "wtf?"エンドユーザが複数のブラウザウィンドウ/タブで非常に同じページを開いて、すべてのリクエストベースのアクションが、他のウィンドウ/タブ内の同じページの動作にも影響します。 。

JSF 2.xの場合、<t:saveState>は、@ViewScopedというマークを付けてリクエストスコープではなく、ビュースコープに置くだけで置き換えることができます。

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

また、この記事では古いJSPビュー技術を使用しています。これは、JSF 2.0以来Faceletsに引き継がれています。また、JSPをFaceletsで置き換えたいと思っています。これらのJSPタグライブラリをトップレベルタグ(<html>タグ)の通常のXML名前空間宣言で削除し、ファイル名を.jspから.xhtmlに変更します。この方法で、<t:dataList><ui:repeat>に置き換えることができます。これはJSPには存在しません。

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

私は理解しており、今後は@ViewScopedのみを使用します。私はより具体的になります:どのように私はこのコードhttp://pastebin.com/ExLrdX3uをhライブラリタグで置き換えることができますか?最終結果を変更せずにtライブラリタグをhライブラリに置き換えたいと思います。 –

+2

ああ、私は ''が見つかりませんでした。私は答えを更新しました。 – BalusC

+0

に置き換えることができますか、他のタグを使用する必要がありますか? –

関連する問題