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

Dav*_*edy 2 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");
}
Run Code Online (Sandbox Code Playgroud)

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

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

2/9/15 1:06 PM:Exception Thrown Context Path:/coms/exhibitor.nsf页面名称:/home.xsp javax.faces.el.E​​valuationException:com.sib中的com.ibm.xsp.acl.RedirectSignal. face.el.MethodBindingImpl.invoke(MethodBindingImpl.java:142)at com.ibm.xsp.component.UIViewRootEx.initBeforeContents(UIViewRootEx.java:1621)at com.ibm.xsp.page.compiled.AbstractCompiledPage.initComponent(AbstractCompiledPage. java.333)com.ibm.xsp.page.compiled.AbstractCompiledPage.createTree(AbstractCompiledPage.java:256)at com.ibm.xsp.page.compiled.AbstractCompiledPage.createViewRoot(AbstractCompiledPage.java:167)at com.ibm位于com.ibm.xsp.application.ViewHandlerExImpl.createViewRoot(ViewHandlerExImpl.java:567)的com.ibm.xsp.application.ViewHandlerExImpl.doCreateView(ViewHandlerExImpl.java)中的.xsp.application.ViewHandlerExImpl._createViewRoot(ViewHandlerExImpl.java:521) :142)在frostillicus.controller.ControllingViewHandler.createView(Controlli)的com.ibm.xsp.application.ViewHandlerEx.createView(ViewHandlerEx.java:90)ngViewHandler.java:89)com.ibm.xsp.webapp.FacesServlet.serviceView(FacesServlet.java:251)com.ibm.xsp.webapp.FacesServletEx.serviceView(FacesServletEx.java:157)com.ibm.xsp的com.ibm.xsp.webapp.FacesServlet.serviceView(FacesServlet.java:251)位于com.ibm.xsp.webapp.FacesServletEx.service(FacesServletEx.java:138)的.webapp.FacesServlet.service(FacesServlet.java:160)位于com.ibm.xsp.webapp.DesignerFacesServlet.service(DesignerFacesServlet.java:103) )com的com.ibm.designer.runtime.domino.adapter.ComponentModule.invokeServlet(ComponentModule.java:576)com的com.ibm.domino.xsp.module.nsf.NSFComponentModule.invokeServlet(NSFComponentModule.java:1335). com中的com.ibm.designer.runtime.domino.adapter.ComponentModule $ ServletInvoker.doService(ComponentModule.java:796)中的ibm.designer.runtime.domino.adapter.ComponentModule $ AdapterInvoker.invokeServlet(ComponentModule.java:853).位于com.ib的com.ibm.domino.xsp.module.nsf.NSFComponentModule.doService(NSFComponentModule.java:1319)的ibm.designer.runtime.domino.adapter.ComponentModule.doService(ComponentModule.java:565)m.domino.xsp.module.nsf.NSFService.doServiceInternal(NSFService.java:662)位于org.openntf.domino的com.ibm.domino.xsp.module.nsf.NSFService.doService(NSFService.java:482).位于com.ibm.designer.runtime.domino.adapter的com.ibm.designer.runtime.domino.adapter.LCDEnvironment.doService(LCDEnvironment.java:357)的xsp.adapter.OpenntfHttpService.doService(OpenntfHttpService.java:86). LCD环境服务(LCDEnvironment.java:313)位于com.ibm.domino.xsp.bridge.http.engine.XspCmdManager.service(XspCmdManager.java:272)引起:com的com.ibm.xsp.acl.RedirectSignal. ibm.xsp.designer.context.XSPContext.renderPage(XSPContext.java:194)位于com.ibm.xsp.designer.context的com.ibm.xsp.designer.context.XSPContext.redirectToPage(XSPContext.java:917). XSPContext.redirectToPage(XSPContext.java:929)位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)的sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法)的controller.home.beforePageLoad(home.java:44)处.在sun.reflect.Delegat ingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)at java.lang.reflect.Method.invoke(Method.java:611)at com.sun.faces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:138)

Ser*_*mez 7

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

你可能会忽略这一点:

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