我正在使用JSF 2和prettyfaces开发一个 Web 应用程序。我@ViewScoped
用漂亮的注释注释了我的一个 bean。这就是我所拥有的:
@ManagedBean
@ViewScoped
@URLMapping(parentId = "app-list", id = "app-view", pattern = "/detail/#{appId}",
viewId = "/system/manage_app/content/app_detail/app_detail.xhtml")
public class NavegableAppView extends SystemNavegable {
/**
基本上,它显示了安装在我的系统中的应用程序的详细信息。这个 bean 可以通过两种方式实例化,传递#{appId}
参数,它指示我要加载的应用程序的 id,或者没有那个参数,在这种情况下,bean 将从一个@SessionScoped
bean 中恢复这个 id。
这就是页面/system/manage_app/content/app_detail/app_detail.xhtml
管理参数的方式:
<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="appId" name="appId"
value="#{navegableAppView._ParamApp}" required="false" />
<f:event type="preRenderView"
listener="#{navegableAppView.initialize}" />
</f:metadata>
</ui:define>
<ui:define name="general_content">
<p:panel>
<!--More stuff-->
这里的问题是我想要NavegableAppView
创建 bean,有或没有参数。我已经尝试过这种方法<p:button value="prueba" outcome="pretty:app-view" />
,但它限制了我只能做结果和<p:commandButton value="prueba2" action="pretty:app-view" ajax="false" />
,这相当于调用一个操作方法并返回导航案例(这就是我真正想要的)。
第一选择正确地创建 bean 并从会话中加载值。第二种情况,给我这个错误:
HTTP 500 - PrettyFaces: Exception occurred while building URL
for MappingId < app-view >, Required value < #{appId} > was null
所以我的目标bean没有被构建。我已经尝试将参数手动添加到导航案例中:return pretty:app-view?appId=1
它可以工作,但我希望目标 bean 从会话本身中恢复它。我是否必须在我的操作方法中调用重定向或类似的东西?
汇集你的想法。