0

Mojarra 2.1.6実装を使用して JSF アプリケーションを構築しています。私のアプリケーション画面は@ViewScoped、各 Bean が 1 つのビューから別のビューに破棄されています。また、一種のナビゲーション バーまたはブレッドクラムが必要なので、ユーザーはそれを使用してページからページに戻ることができます。それを達成するために、次のように Primefaces を使用p:buttonしています。

<h:panelGroup
      rendered="#{!navigationManager._DisableNavigationButtons}">
<p:toolbar>
    <p:toolbarGroup>
        <ui:repeat value="#{navigationManagerSystem._Navegables}"
                                        var="item">
            <p:button value="#{item._Title}" outcome="#{item._IncludePath}">
                <f:param name="params" value="#{item._NavigationParams}" />
            </p:button>
        </ui:repeat>
        <p:button disabled="true"
            value="#{navigationManagerSystem._Navegable._Title}" />
    </p:toolbarGroup>
</p:toolbar>

このコードでわかるように、これは基本的にボタン付きのツールバーです。このボタンは古い URL を保存しているため、ユーザーがそれらのいずれかをクリックすると戻ることができます。

ただし、私の問題は、ビューパラメーターを受け取っているページがいくつかあり、一般的なことをしたいので、ユーザーがボタンをクリックしたときにそれらを回復するために、パラメーターをjava.util.List( navigationManagerSystemはBean です) に保存することです。@SessionScoped戻って、古い Bean の状態を達成します。

しかし、上記の例は機能しません。宛先ページがそのように記述されていても

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:p="http://primefaces.org/ui"
template="/templates/general_template.xhtml">

<ui:define name="metadata">
    <f:metadata>
        <f:viewParam id="user" name="user"
            value="#{navegableUserData._ParamUser}" required="true"
            requiredMessage="User is required" />
        <f:viewParam id="params" name="params"
            value="#{navegableUserData._NavigationParams}" />
        <f:event type="preRenderView"
            listener="#{navegableUserData.initialize}" />
    </f:metadata>
    <h:message for="user" />
</ui:define>

<ui:define name="general_content">
    <p:outputPanel autoUpdate="false" id="Datos_Loged" name="Datos_Loged"
        layout="block">
        <h:form id="SystemUserForm">
            <ui:include
                src="/system/manage_user/content/edit_user/system_user_data/system_user.xhtml" />
        </h:form>
    </p:outputPanel>
</ui:define>

_NavigationParamsセッターが呼び出されておらず、変換例外が発生しています。JSFでこれを行うためのより良い方法があるかどうかはわかりません.おそらく@ViewScopedBeanを維持しています...

4

2 に答える 2

0

f:viewParam、f:param は、GET パラメータの設定、変換、および検証を管理します。したがって、URL は newPage.jsf?param=10 のようなものになります。get パラメータにクラスのリストを入れようとすると、エラーが発生します。これは、get パラメータが文字列でなければならないためです。

于 2013-01-02T13:51:01.027 に答える
0

解決策は、ビューを介してパラメーターを直接渡さないことだと思います。ボタンのキューを制御するnavigationManager Bean にそれらをホストするだけです。@SessionScopedとにかく、@ViewScopedBean からパラメーターを回復するためにどのボタンがクリックされたかを知る必要があります。ビューを介したインデックス値で十分でしょう。

そうすれば、ブレッドクラムを更新したままにするために、クリックされたボタンの後にあるボタンを削除することもできます。

とにかく、他のアイデアは大歓迎です。

于 2013-01-02T14:14:17.010 に答える