1

ページネーションとソートを使用してJSFテーブルを作成する方法を示すこの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 タグだけでこのコードを編集できますか?

幸運をお祈りしています

4

1 に答える 1

3

この古い記事は JSF 1.x を対象としており、コードはリクエスト スコープ Bean で使用することを意図しています。は<t:saveState>、新しい JSF 2.x ビュー スコープとまったく同じように、リクエスト スコープ Bean が次の POST リクエストで保持されるようにします (したがって、標準の JSF 1.x にはまだ存在しませんでした)。セッション スコープはオプションではありません。エンドユーザーが複数のブラウザー ウィンドウ/タブでまったく同じページを開き、すべての要求ベースのアクションが他のウィンドウ/タブの同じページの動作に影響を与える状況、およびエンドユーザーがそれらを切り替えて要求ベースのアクションを呼び出す場合.

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

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

また、この記事は古い JSP ビュー テクノロジを使用していることにも注意してください。これは、JSF 2.0 以降の Facelets に引き継がれています。また、JSP を Facelets に置き換えたいと考えています。最上位タグ (<html>タグ) 内の通常の XML 名前空間宣言によってこれらの JSP タグライブラリを削除し、ファイルの名前を から.jspに変更します.xhtml<t:dataList>このようにして、JSP に存在し<ui:repeat>ないものを置き換えることができます。

<ui:repeat value="#{myBean.pages}" var="page">
    ...
</ui:repeat>
于 2012-04-07T19:10:09.673 に答える