【问题标题】:Redirecting to a Facelet is not working when extending FaceletViewHandler扩展 FaceletViewHandler 时重定向到 Facelet 不起作用
【发布时间】:2011-03-04 15:00:49
【问题描述】:

我正在重写 com.sun.facelets.FaceletViewHandler 中定义的 handleRenderResponse 方法:

protected void handleRenderException(FacesContext context, Exception ex)

我将覆盖此方法,以便将用户重定向到自定义错误页面(其中包含所需的外观和其他内容)。这就是我正在尝试的方式

String errorPage = "/error.xhtml";          
String contextPath = context.getExternalContext().getRequestContextPath();          
String errorPagePath = contextPath+errorPage;
context.getExternalContext().redirect(errorPagePath);

前面的代码是我用来重定向到这个自定义错误页面的代码。无论如何,当我执行重定向时,我会收到一个下载对话框提示(这是使用 Internet Explorer,在 Firefox 中,页面无法正确显示或无法正常显示)。我尝试将“/error.xhtml”更改为“/error.jsf”,但在这种情况下我收到 404 错误。

不知何故,我认为重定向后 XHTML 文件没有被处理到 Facelets ViewHandler,如果我打开下载的 xhtml 文件,我可以看到 EL 表达式没有被解析并且 ui 标记没有被处理。我的应用程序中的其他页面没有问题,只有在以编程方式进行重定向时。

来自我的 web.xml 的重要数据:

facelets.VIEW_MAPPINGS 设置为 *.xhtml

javax.faces.DEFAULT_SUFFIX 设置为 .xhtml

“Faces Servlet”的 servlet 映射是“.jsf”和“/faces/

【问题讨论】:

  • 有什么理由不使用<error-page> in web.xml
  • 我可以这样做,但实际上我希望能够动态地更多地控制发生异常时会发生什么(例如调用特定的导航规则或更新托管 bean、更新会话数据、等等。)。如果我使用错误页面,我不确定我是否可以拥有这么多的控​​制权,你怎么看?
  • 可以是JSF(XHTML)页面。您可以将托管 bean 附加到它。托管 bean 可以访问FacesContext。算一下 :) 顺便说一句,在非其他人的帖子中评论其他人的 cmets 时,请使用 @name 让他们立即得到通知。在我偷看之前我没有看到你的评论。另见this
  • @BalusC,很抱歉这么长时间忽略了这篇文章,但是一旦我解决了我的问题,我就忘记更新了。我最终使用了一种混合方法,我同时使用了错误页面元素,并且我还提供了一个自定义的视图处理程序,我在其中覆盖了 handleRenderException 以便对于非常具体的错误情况我可以采取特殊的措施。

标签: java jsf facelets


【解决方案1】:

Facelets 模板之一出现问题,该模板包含一个错误,一旦解决,应用程序就可以正常工作。

【讨论】:

    猜你喜欢
    • 2021-03-02
    • 1970-01-01
    • 2014-07-19
    • 2016-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多