2015-02-09 44 views
2

XPage內部我使用一些控制器類將XPages的beforePageLoad()事件綁定到Java方法。如何通過Java將XPage用戶重定向到其他頁面

在這種方法中,我想將用戶重定向到不同的網頁。它的工作原理..但它會在控制檯上引發大量錯誤。

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中的事件重定向到另一個頁面。 一些我得到的消息是:

15年2月9日下午1:06:拋出異常 上下文路徑:/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) at com.ibm.xsp.page.compiled.AbstractCompiledPage.initComponent(AbstractCompiledPage.java:333) at com.ibm.xsp.page.compiled.AbstractCompiledPage.createTree(AbstractCompiledPage.java:256) at com .ibm.xsp.page.compiled.AbstractCompiledPage.c reateViewRoot(AbstractCompiledPage.java:167) 在com.ibm.xsp.application.ViewHandlerExImpl._createViewRoot(ViewHandlerExImpl.java:521) 在com.ibm.xsp.application.ViewHandlerExImpl.createViewRoot(ViewHandlerExImpl.java:567) 在com.ibm.xsp.application.ViewHandlerExImpl.doCreateView(ViewHandlerExImpl.java:142) at com.ibm.xsp.application.ViewHandlerEx.createView(ViewHandlerEx.java:90) at 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) at com.ibm.xsp.we bapp.FacesServletEx.service(FacesServletEx.java:138) at com.ibm.xsp.webapp.DesignerFacesServlet.service(DesignerFacesServlet.java:103) at com.ibm.designer.runtime.domino.adapter.ComponentModule.invokeServlet( ComponentModule.java:576) at com.ibm.domino.xsp.module.nsf.NSFComponentModule.invokeServlet(NSFComponentModule.java:1335) at 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) at com.ibm.designer.runtime.domino.adapter.LCDEnvironment.doService(LCDEnvironment.java:357) at com.ibm。 COM:designer.runtime.domino.adapter.LCDEnvironment.service(LCDEnvironment.java:313) 在com.ibm.domino.xsp.bridge.http.engine.XspCmdManager.service(XspCmdManager.java:272) 所致。 ibm.xsp.acl.RedirectSignal at 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在sun.reflect.DelegatingMethodAccessorImpl.invoke(home.java:44) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本機方法) 在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60) (DelegatingMethodAccessorImpl.java:37) 在java.lang.reflect.Method.invoke(Method.java:611) 在com.sun.faces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:138)

回答

7

這不是一個錯誤。只是通知其他進程的例外情況。通常,SSJS處理器使用它來停止代碼的進一步處理。

你可能會忽略:

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

嗯必須嘗試這個,因爲我有時用這個...謝謝塞爾達! – 2015-02-09 18:42:07

+0

工作很好!謝謝!!我應該注意到,您需要爲此添加一個導入:import com.ibm.xsp.acl.RedirectSignal; – 2015-02-17 18:15:55

相關問題