jsf-2 - 重定向到已配置的 <error-page> 时出现异常 (HTTP 500)

标签 jsf-2 omnifaces

我在重定向到 web.xml (HTTP 500) 中配置的错误页面时遇到问题。 抛出以下异常

java.lang.NullPointerException at java.lang.StringBuilder.<init>(StringBuilder.java:77) 
at org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.getRenderedViewId(FaceletViewDeclarationLanguage.java:1674)
FullAjaxExceptionHandler: Well, another exception occurred during rendering error page 'comum/paginas/erro/erro500.xhtml'. Trying to render a hardcoded error page now.

web.xml

<error-page>
    <exception-type>javax.faces.application.ViewExpiredException</exception-type>
    <location>comum/paginas/erro/sessaoExpirada.xhtml</location>
</error-page>
<error-page>
    <exception-type>java.lang.Throwable</exception-type>
    <location>comum/paginas/erro/erro500.xhtml</location>
</error-page>
<error-page>
    <error-code>500</error-code>
    <location>comum/paginas/erro/erro500.xhtml</location>
</error-page>
<error-page>
    <error-code>403</error-code>
    <location>comum/paginas/erro/erro403.xhtml</location>
</error-page>
<error-page>
    <error-code>404</error-code>
    <location>comum/paginas/erro/erro404.xhtml</location>
</error-page>

FullAjaxExceptionHandlerFactory 已在 faces-config.xml 中配置。

<factory>
    <exception-handler-factory>org.omnifaces.exceptionhandler.FullAjaxExceptionHandlerFactory</exception-handler-factory>
</factory>

我的facelets组件打包在一个jar文件中(/META-INF/resources/comum/paginas/erro)。 资源解析器

<context-param>
    <param-name>javax.faces.FACELETS_RESOURCE_RESOLVER</param-name>
    <param-value>company.FaceletsResourceResolver</param-value>
</context-param>

public class FaceletsResourceResolver extends ResourceResolver {

    private ResourceResolver parent;
    private String basePath;

    public FaceletsResourceResolver(ResourceResolver parent) {
        this.parent = parent;
        this.basePath = "/META-INF/resources";
    }

    @Override
    public URL resolveUrl(String path) {
        URL url = parent.resolveUrl(path); // Resolves from WAR.
        if (url == null) {
            url = getClass().getResource(basePath + path); // Resolves from JAR.
        }
        return url;
    }
}

当facelets组件没有打包在jar中时,重定向可以正常工作。 其他错误页面(403、404、sessionExpired)可以正常工作。 该错误仅在 HTTP 500 错误时发生。

环境:

  • Websphere 8.5.5.2
  • JSF 2.0(myfaces)
  • Primefaces 5.0
  • Omnifaces 1.7

最佳答案

<location>需要以 / 开头.

例如

<location>comum/paginas/erro/erro500.xhtml</location>

必须是

<location>/comum/paginas/erro/erro500.xhtml</location>

关于jsf-2 - 重定向到已配置的 <error-page> 时出现异常 (HTTP 500),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25914227/

相关文章:

jsf-2 - p :Column composite element wont export in p:DataExporter

java - 我正在尝试在我的 jsf 2 应用程序中使用 spring security 3.1.3,但出现以下异常

java - 通过 JSF 中的 java 脚本启用/禁用按钮

jsf - 更新了omnifaces jar,现在它说我的转换器不明确

java - 尽管原始文件有效,但从服务器下载的 PDF 无效

jsf - OmniFaces ViewScoped bean 的内存影响?

jsf - OmniFaces - ConverterManager 操作模式

jsf - Apache Tomcat 7.0.47 上的 BeanManager 无法创建资源实例

session - JSF 在 shiro 中更改 session 超时

java - 如何从支持 bean 获取 JSF 2.0 组件生成的 HTML 的 DOM?