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でこれを行うためのより良い方法があるかどうかはわかりません.おそらく@ViewScoped
Beanを維持しています...