JSF 2とprettyfacesを使用して Web アプリケーションを開発しています。Beanの 1 つに@ViewScoped
かなりの注釈を付けました。それが私が持っているものです:
@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 {
/**
基本的に、システムにインストールされているアプリケーションの詳細が表示されます。#{appId}
この Bean は、ロードするアプリケーションの ID を示す paramを渡す方法と、そのパラメーターを使用しない方法の 2 つの方法でインスタンス化できます。この場合、Bean は Bean からこの ID を回復し@SessionScoped
ます。
それが、ページ/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 を適切に作成し、セッションから値をロードします。2番目のケースでは、このエラーが発生しています:
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 がセッション自体からそれを回復するようにします。アクションメソッドでリダイレクトなどを呼び出す必要がありますか?
アイデアをプールします。