我正在使用 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 ......
答案 0 :(得分:0)
f:viewParam,f:param管理GET参数的设置,转换和验证。因此,url将类似于newPage.jsf?param = 10。如果您尝试在get参数中添加类列表,则会出现错误,因为get参数必须是字符串。
答案 1 :(得分:0)
我认为解决方案不能直接通过视图传递参数。只需将它们托管到 navigationManager bean @SessionScoped
并控制按钮队列即可。无论如何,我需要知道点击了哪个按钮才能从我的@ViewScoped
bean中恢复参数,通过视图的索引值就足够了,不是吗?
这样我也可以删除单击之后的按钮,以便更新面包屑。
无论如何,欢迎其他想法。