在支持 bean中验证事件中的视图参数preRenderView
我观察到,<f:event>
即使任何方法使用以下方法调用重定向,仍然会触发每个事件:
FacesContext.getExternalContext().redirect(url);
如果在多个事件中调用重定向,则会抛出非法状态错误异常。
为了防止这种情况,我想知道是否以及如何通常检测是否已经调用了重定向并处理第一个或最后一个重定向。
在支持 bean中验证事件中的视图参数preRenderView
我观察到,<f:event>
即使任何方法使用以下方法调用重定向,仍然会触发每个事件:
FacesContext.getExternalContext().redirect(url);
如果在多个事件中调用重定向,则会抛出非法状态错误异常。
为了防止这种情况,我想知道是否以及如何通常检测是否已经调用了重定向并处理第一个或最后一个重定向。
您可以使用FacesContext#getRenderResponse()
来确认进入该RENDER_RESPONSE
阶段的流程(或订单)是否已启动。这将检查renderResponse()
方法是否已被组件调用,向运行时发出信号以将控制权转移到RENDER_RESPONSE
阶段。一般来说,此时尝试对响应流做任何事情都是不安全的。
另一个通往灵态的途径RENDER_RESPONSE
是FacesContext#responseComplete()
方法。然而,这并不直接触发响应处理。相反,它是指示RENDER_RESPONSE
已到达运行时的最终标志。
因此,根据规范,FacesContext#getResponseComplete()
是验证响应状态的最终检查
在某些情况下,可能已为请求调用了 renderResponse() 和 responseComplete()。在这种情况下,JSF 实现在检查是否调用了 renderResponse() 之前必须尊重 responseComplete() 调用(如果已进行)。