在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.EvaluationException: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)
答案 0 :(得分:7)
这不是错误。通知其他进程只是一个例外。通常,SSJS处理器使用它来停止进一步处理代码。
你可能会忽略:
try {
context.redirectToPage("/test.xsp");
} catch (RedirectSignal rs) {
// Ignoring this error. Useless!
}