[英]Save state of ViewScoped bean
我正在使用Mojarra 2.1.6實現構建JSF應用程序。 我的應用程序屏幕為@ViewScoped
,每個bean從一個視圖被銷毀到另一個視圖。 我也想擁有一種導航欄或面包屑,以便用戶可以使用它來翻頁。 為了實現這一點,我以這種方式使用了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是@SessionScoped
bean)中,以便當用戶單擊按鈕返回時恢復它們,以實現舊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
setter沒有被調用,並且我有一個轉換異常。 我不知道在JSF中是否有更好的方法可以做到這一點,也許可以維護@ViewScoped
bean。
f:viewParam,f:param管理GET參數的設置,轉換和驗證。 因此,該URL將類似於newPage.jsf?param = 10。 如果嘗試將類列表放入get參數中,則將出現錯誤,因為get參數必須是字符串。
我認為解決方案可以是不直接通過視圖傳遞參數。 只需將它們托管到@SessionScoped
navigationManager bean中,並控制按鈕隊列。 無論如何,我需要知道單擊了哪個按鈕才能從@ViewScoped
bean中恢復參數,通過視圖的索引值就足夠了,不是嗎?
這樣,我也可以刪除單擊后的按鈕,以保持面包屑更新。
無論如何,歡迎其他想法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.