如何通过Java将XPage用户重定向到另一个页面

时间:2015-02-09 18:20:49

标签: java xpages

在XPages中,我使用一些控制器类将XPages的beforePageLoad()事件绑定到Java方法。

在此方法中,我想将用户重定向到其他网页。它工作..但它在控制台上抛出了大量的错误。

public void beforePageLoad() throws Exception {

        Map<String, String> param = (Map<String, String>) XSPUtil.resolveVariable("param");
        if (!param.containsKey("exhibitorId")) {
            System.out.println("Redirecting");
            FacesContext fc = FacesContext.getCurrentInstance();
            ExternalContext externalContext = fc.getExternalContext();

            XSPContext context = XSPContext.getXSPContext(fc);
            context.redirectToPage("/test.xsp");
}

这是基本代码..我尝试过使用externalContext ...这个示例显示了XSPContext。所以我只是不确定该怎么做。

对事件的绑定不是问题。那工作得很好。它只是使用Java中的事件重定向到另一个页面。 我收到的一些消息是:

2/9/15 1:06 PM:异常抛出 上下文路径:/coms/exhibitor.nsf 页面名称:/home.xsp javax.faces.el.E​​valuationException:com.ibm.xsp.acl.RedirectSignal     at com.sun.faces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:142)     at com.ibm.xsp.component.UIViewRootEx.initBeforeContents(UIViewRootEx.java:1621)     在com.ibm.xsp.page.compiled.AbstractCompiledPage.initComponent(AbstractCompiledPage.java:333)     在com.ibm.xsp.page.compiled.AbstractCompiledPage.createTree(AbstractCompiledPage.java:256)     在com.ibm.xsp.page.compiled.AbstractCompiledPage.createViewRoot(AbstractCompiledPage.java:167)     at com.ibm.xsp.application.ViewHandlerExImpl._createViewRoot(ViewHandlerExImpl.java:521)     在com.ibm.xsp.application.ViewHandlerExImpl.createViewRoot(ViewHandlerExImpl.java:567)     at com.ibm.xsp.application.ViewHandlerExImpl.doCreateView(ViewHandlerExImpl.java:142)     在com.ibm.xsp.application.ViewHandlerEx.createView(ViewHandlerEx.java:90)     在frostillicus.controller.ControllingViewHandler.createView(ControllingViewHandler.java:89)     在com.ibm.xsp.webapp.FacesServlet.serviceView(FacesServlet.java:251)     在com.ibm.xsp.webapp.FacesServletEx.serviceView(FacesServletEx.java:157)     在com.ibm.xsp.webapp.FacesServlet.service(FacesServlet.java:160)     在com.ibm.xsp.webapp.FacesServletEx.service(FacesServletEx.java:138)     在com.ibm.xsp.webapp.DesignerFacesServlet.service(DesignerFacesServlet.java:103)     在com.ibm.designer.runtime.domino.adapter.ComponentModule.invokeServlet(ComponentModule.java:576)     在com.ibm.domino.xsp.module.nsf.NSFComponentModule.invokeServlet(NSFComponentModule.java:1335)     在com.ibm.designer.runtime.domino.adapter.ComponentModule $ AdapterInvoker.invokeServlet(ComponentModule.java:853)     在com.ibm.designer.runtime.domino.adapter.ComponentModule $ ServletInvoker.doService(ComponentModule.java:796)     在com.ibm.designer.runtime.domino.adapter.ComponentModule.doService(ComponentModule.java:565)     在com.ibm.domino.xsp.module.nsf.NSFComponentModule.doService(NSFComponentModule.java:1319)     在com.ibm.domino.xsp.module.nsf.NSFService.doServiceInternal(NSFService.java:662)     在com.ibm.domino.xsp.module.nsf.NSFService.doService(NSFService.java:482)     在org.openntf.domino.xsp.adapter.OpenntfHttpService.doService(OpenntfHttpService.java:86)     在com.ibm.designer.runtime.domino.adapter.LCDEnvironment.doService(LCDEnvironment.java:357)     在com.ibm.designer.runtime.domino.adapter.LCDEnvironment.service(LCDEnvironment.java:313)     在com.ibm.domino.xsp.bridge.http.engine.XspCmdManager.service(XspCmdManager.java:272) 引起:com.ibm.xsp.acl.RedirectSignal     在com.ibm.xsp.designer.context.XSPContext.renderPage(XSPContext.java:194)     在com.ibm.xsp.designer.context.XSPContext.redirectToPage(XSPContext.java:917)     在com.ibm.xsp.designer.context.XSPContext.redirectToPage(XSPContext.java:929)     在controller.home.beforePageLoad(home.java:44)     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)     在java.lang.reflect.Method.invoke(Method.java:611)     在com.sun.faces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:138)

1 个答案:

答案 0 :(得分:7)

这不是错误。通知其他进程只是一个例外。通常,SSJS处理器使用它来停止进一步处理代码。

你可能会忽略:

try {
    context.redirectToPage("/test.xsp");
} catch (RedirectSignal rs) {
    // Ignoring this error. Useless!
}