加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

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

发布时间:2021-01-23 04:03:28 所属栏目:站长百科 来源:网络整理
导读:是否可以从托管bean的结构函数导航到另一个页面/视图?假如产生任何非常,我想要这个重定向.我实行了许多要领: 实行-1: getFacesContext().responseComplete();getFacesContext().getApplication().getNavigationHandler().handleNavigation(getFacesContex

是否可以从托管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是可行的,但很是鸠拙.

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读