私のアプリケーションには、保存および取得機能があります。オブジェクトがデータベースに保存され、正しく取得されるという点で、保存/取得が機能しています。ただし、検索ランディングページでは、保存されたアプリケーションの状態に応じて、ユーザーとの詳細を検証するか、最後にアクセスしたビューにサイレントに移動します。後者は私が問題を抱えているところです。
春のBeanを使用しており、SaveAndRetrieveページのBeanには次のものがあります。
@PostConstruct
public void initialise() {
caseNotFound = false;
caseReference = saveAndRetrieveActionHandler.getRequestedCaseReference();
LOGGER.debug("Retrieve initialise. Case ref is {}", caseReference);
if (caseReference != null) {
try {
saveAndRetrieveActionHandler.retrieveApplicationByCaseRef();
LOGGER.debug("Retrieve initialise - case found");
final NavigationOutcome outcome = saveAndRetrieveActionHandler.getLastAccessedView();
if (outcome.getApplicationState() == ApplicationState.QUOTE) {
LOGGER.info("Quote retrieved, navigating to view");
// HERE IS WHERE THE TROUBLE LIES! THIS DOESNT WORK
FacesUtils.setNextViewNavigation(outcome.getViewId());
}
} catch (final FrameworkException fe) {
LOGGER.debug("Exception caught {}", fe);
caseNotFound = true;
}
}
}
結果は、特にナビゲートする必要のあるビューとアプリケーションの状態(別の列挙)を含む列挙です。applicationStateがquoteの場合、黙ってナビゲートしたいと思います。他のすべてのapplicationStateについては、ユーザーに確認を求めます。
私のfacesUtilsメソッドは次のとおりです。
public static void setNextViewNavigation(final String p_lastAccessedViewId) {
if (p_lastAccessedViewId != null) {
getCurrentViewRoot().setViewId(p_lastAccessedViewId);
}
}
私もこのメソッドを呼び出してみました
public static void navigateToOutcome(final String p_outcome) {
final FacesContext context = getFacesContext();
final NavigationHandler navigationHandler = context.getApplication().getNavigationHandler();
navigationHandler.handleNavigation(context, null, p_outcome);
}
私の努力にもかかわらず、保存されたページに静かにナビゲートしたいランディングページが表示されています
基本的に、現在のライフサイクルを中止し、viewrootを保存されたビューにリセットしたいと思います。(コンポーネントツリー自体を保存するのではなく、ビジネスオブジェクトのみを保存することに注意してください)
もう1つの情報、これはjsf1.2ですが、ファセットがあります。jsf2固有の機能を使用することも、サードパーティのJSF拡張機能を使用することもできません。
助けてください!