从ADF Faces JSF 1.2中的托管bean构造函数导航

从ADF Faces JSF 1.2中的托管bean构造函数导航,第1张

概述是否可以从托管bean的构造函数导航到另一个页面/视图?如果发生任何异常,我想要这个重定向.我尝试了很多方法: 尝试-1: getFacesContext().responseComplete();getFacesContext().getApplication().getNavigationHandler().handleNavigation(getFacesContext(), null, 是否可以从托管bean的构造函数导航到另一个页面/视图?如果发生任何异常,我想要这个重定向.我尝试了很多方法:

尝试-1:

getFacesContext().responseComplete();getFacesContext().getApplication().getNavigationHandler().handleNavigation(getFacesContext(),null,"gotopartError");    getFacesContext().renderResponse();

尝试-2:

getServletResponse().sendRedirect("partError.Jspx")

尝试-3:

getFacesContext().responseComplete();    getFacesContext().getExternalContext().redirect(getServletRequest().getcontextpath() + "/pages/partError.Jspx");

尝试-4:

Requestdispatcher dispatcher = getServletRequest().getRequestdispatcher("partError.Jspx");dispatcher.forward(getServletRequest(),getServletResponse());

尝试-5:

FacesContext context = getFacesContext();UIVIEwRoot newPage = context.getApplication().getVIEwHandler().createVIEw(context,"/partError.Jspx");context.setVIEwRoot(newPage);context.renderResponse();

尝试-6:

ControllerContext.getInstance().getCurrentVIEwPort().setVIEwID("partError");

尝试-7:

Exception Handler in adfc-config.xml

尝试-8:

Custom service handler defined in /.adf/meta-inf/services/oracle.adf.vIEw.rich.context.Exceptionhandler which extends oracle.adf.vIEw.rich.context.Exceptionhandler

尝试-9:

By extending JsF life Cycle

他们都没有工作.对于我收到的所有案件

java.lang.IllegalStateException: Cannot forward after response has been committed

在JsF 1.2中真的不可能吗?当我使用ADF 11.1.1.6.0(使用JsF 1.2)时,上面的一些“Try”包含ADF Faces方法.

无论如何,我需要,可以是JsF 1.2或ADF Faces,导航到错误页面.我获得成功的唯一方法是使用从后端执行的JavaScript,以便在出现错误时在_self窗口中打开错误页面,但我真的不喜欢它.

这件事中的任何指针都会非常有用.

解决方法 如果理解问题的原因,则更容易解决问题.一个很好的例外基本上已经说明了问题原因的一切.

仔细看看:

java.lang.IllegalStateException: Cannot forward after response has been committed

响应已经提交.这是一个不归路.也许您无法理解提交响应意味着什么(其结果是您也无法理解异常本身).

默认情况下,http响应被写入缓冲区,每隔~2KB刷新一次,具体取决于服务器配置.刷新响应缓冲区会导致写入的字节实际从服务器发送到客户端.一旦第一次发生这种情况,就会认为响应已提交.这是一个不归路.如果服务器实际上需要在之后更改响应,则服务器无法从客户端返回已写入的字节.

如果您有一些可能需要更改响应的代码,那么您应该在提交响应之前调用它.

在您的特定情况下,在生成HTML输出期间,托管bean显然是在JsF呈现响应阶段中构建的.已生成的HTML输出的一部分已发送到客户端(因此,响应已提交).您显然在JsF页面中相对较晚地引用了请求范围的bean,或者响应缓冲区相对较小,或者HTML< head>相对较大,这导致在< body>之前已经冲洗.开始,等等.

您确实需要在呈现响应阶段之前调用代码.在JsF 1.2中,您可以使用< f:vIEw beforePhase>为了这.

例如.

<f:vIEw beforePhase="#{bean.navigate}">

public voID navigate(PhaseEvent event) {    if (event.getPhaseID() == PhaseID.RENDER_RESPONSE) {        // Do here your job which should run right before the RENDER_RESPONSE.    }}

那么你的Try-1和Try-3就可以了(你可以将那些responseComplete()和renderResponse()行留下来,它们已经被隐含地处理了).

Try-2和Try-4很差.你应该避免在你的支持bean中使用javax.servlet.* import. Try-5很笨拙. Try-6,Try-7和Try-8超出了我的范围. Try-9是可行的,但非常笨拙.

总结

以上是内存溢出为你收集整理的从ADF Faces JSF 1.2中的托管bean构造函数导航全部内容,希望文章能够帮你解决从ADF Faces JSF 1.2中的托管bean构造函数导航所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1163275.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存