Jsf 2 getRequestDispatcher(";).forward在JSF2.0中不起作用
在我使用JSF2.0的应用程序中,我有以下代码Jsf 2 getRequestDispatcher(";).forward在JSF2.0中不起作用,jsf-2,Jsf 2,在我使用JSF2.0的应用程序中,我有以下代码 HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext() .getRequest(); HttpServletResponse response = (HttpServletResponse)FacesContext.getCu
HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext()
.getRequest();
HttpServletResponse response = (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();
......
try {
request.getRequestDispatcher("SomePage.xhtml").forward(request, response);
} catch (ServletException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
但是,当你排队的时候
request.getRequestDispatcher("SomePage.xhtml").forward(request, response);
正在执行我得到以下异常
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.RangeCheck(ArrayList.java:547)
at java.util.ArrayList.get(ArrayList.java:322)
at javax.faces.component.AttachedObjectListHolder.restoreState(AttachedObjectListHolder.java:165)
at javax.faces.component.UIComponentBase.restoreState(UIComponentBase.java:1432)
at com.sun.faces.application.view.StateManagementStrategyImpl$1.visit(StateManagementStrategyImpl.java:265)
at com.sun.faces.component.visit.FullVisitContext.invokeVisitCallback(FullVisitContext.java:151)
由于一些应用限制,我不能使用
FacesContext.getCurrentInstance().getExternalContext().redirect();
方法
这是JSF2.0的错误吗???我从未尝试过以这种方式发送重定向,因为这不是JSF2中导航的标准解决方案 以下是一些可以在JSF 2.0环境中正常工作的方法: 1。在导航链接中指定重定向命令 将
?faces redirect=true
附加到您的导航中,这应该可以完成任务
public String someAction(){
// Logic here
return "newPage" + "?faces-redirect=true"
}
<h:form id = "form">
<h:inputText>...</h:inputText>
<h:commandButton action = "#{controller.someAction}" />
</h:form>
首先,每当您需要在JSF管理的bean中使用
javax.servlet.
类时,就会发生很大的变化,导致您的操作方式错误或不必要的过度复杂。下次需要添加importjavax.servlet…,请记住这一点代码>行
至于您的具体问题,在您的特定情况下,您应该返回视图ID以便执行转发
public String someAction() {
// ...
return "SomePage";
}
另一种选择是ExternalContext#dispatch()
方法,但这也不必要地过于复杂。好的,在执行前向操作之前,似乎需要调用一些JSF生命周期方法,因为我能够使用正常的JSF导航执行前向操作。知道哪种方法吗???@BalusC谢谢!我在那里看到了.redirect()
,这不知怎么地误导了我
public String someAction() {
// ...
return "SomePage";
}