【问题标题】:JSF navigating to a different view programaticallyJSF 以编程方式导航到不同的视图
【发布时间】:2013-01-29 22:31:17
【问题描述】:

我的应用程序具有保存和检索功能。我有保存/检索工作,因为对象被保存到数据库并正确检索。但是,在我的检索登录页面中,根据保存的应用程序的状态,我想与用户验证一些详细信息,或者静默导航到最后访问的视图。后者是我遇到麻烦的地方。

我们正在使用 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;
            }
        }
    }

outcome 是一个枚举,其中包含我需要导航到的视图和应用程序状态(另一个枚举)。如果 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 扩展。

请帮忙!

【问题讨论】:

    标签: jsf facelets


    【解决方案1】:

    我们通过使用带有 src 属性的 ui:include 标记解决了这个问题,该 src 属性是确定要导航到的页面名称的 jsf 方法。

    【讨论】:

    • 是的,这几乎就是我们最终要做的,它有点笨拙但确实有效。
    猜你喜欢
    • 2011-07-29
    • 1970-01-01
    • 2018-02-15
    • 2017-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多