我的应用程序具有保存和检索功能。我有保存/检索工作,因为对象被保存到数据库并正确检索。但是,在我的检索登录页面中,根据保存的应用程序的状态,我要么想要与用户验证一些细节,要么静默导航到上次访问的视图。后者是我遇到麻烦的地方。
我们正在使用spring 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是引用,我想静默导航。对于所有其他应用程序状态,我想挑战用户验证它们。
我的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重置为已保存的视图。 (注意我不是保存组件树本身,只是我的业务对象)
还有一条信息,这是jsf1.2,但是有facelets。我不能使用任何特定于jsf2的功能,也不能使用任何第三方JSF扩展。
请帮忙!
答案 0 :(得分:0)
我们通过使用ui:include标记来解决这个问题,其中src属性是一个jsf方法,用于确定要导航到的页面的名称。