我正在使用 JSF,并且我有一个支持 bean 方法,它进行一些处理并设置一个变量“结果”,然后根据 faces-config.xml 导航规则决定要导航到的下一页。
我想要做的是在导航到下一页时将参数添加到 URL(在支持 bean 中?)。但是,在支持 bean 方法所在的 Handler 中,没有对 HttpRequest 对象的引用。这是一个已经存在很长时间的现有处理程序,所以我想知道我该怎么做
request.setAttribute("name", value);
JSF 有不同的方法吗?非常感谢任何帮助。
嗨,BalusC,
我正在尝试实现您在下面解释的内容,但是我遇到了问题。这就是我所拥有的:
StringBuffer url = ( (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest()).getRequestURL();
url.append( "?serialNumber=");
url.append(regBean.getSerialNumber());
try{ FacesContext.getCurrentInstance().getExternalContext().redirect(url.toString());
}catch (Exception ex){
ex.printStackTrace();
}
没有生成异常,但是我收到 500 Http 错误“服务器遇到未知错误”。日志显示了更多细节,但不足以提供帮助:
错误 [生命周期] JSF1054:(阶段 ID:INVOKE_APPLICATION 5,查看 ID:/registration/productValidation.jsp)阶段执行期间抛出异常:javax.faces.event.PhaseEvent[source=com.sun.faces.lifecycle.LifecycleImpl@591dae ] 11:19:12,186 错误 [[Faces Servlet]] Servlet.service() for servlet Faces Servlet 在 org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:435) 在 com 处抛出异常 java.lang.IllegalStateException .sun.faces.context.ExternalContextImpl.redirect(ExternalContextImpl.java:421) 在 com.sun.faces.application.NavigationHandlerImpl.handleNavigation(NavigationHandlerImpl.java:181) 在 com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl .java:130) 在 javax.faces.component.UICommand.broadcast(UICommand.java:387) 在 org.ajax4jsf.component。AjaxViewRoot.processEvents(AjaxViewRoot.java:321) 在 org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:296) 在 org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:253) 在 org.ajax4jsf.component .AjaxViewRoot.processApplication(AjaxViewRoot.java:466) 在 com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82) 在 com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)82) 在 com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)82) 在 com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
任何想法都将不胜感激。谢谢!
好的,感谢您的评论,我改变了一些东西,现在我有了:
FacesContext.getCurrentInstance().getExternalContext().redirect("mypage.jsp?serialNumber=555555");
调试后,我可以看到重定向正在工作,因为在 mypage.htm 上,我正在显示资源包(属性文件)中的一些标头,因此当它试图显示标头时,它在下面的行中遇到了 NullPointer:
FacesContext context = FacesContext.getCurrentInstance();
context 为空,所以日志显示 NullPointer 错误但页面的 url 是正确的我可以看到地址栏显示 http://..../mypage.jsp?serialNum=5555 正如预期的那样!似乎仅显示页面内容时遇到了麻烦。这么近,这么远;-(