Facelets 1.x使用不正确的文件名/路径静默失败

时间:2012-06-21 05:40:14

标签: jsf facelets jsf-1.2

在IBM门户服务器6.1上使用带有Facelets 1.x的JSF 1.2

我们正在广泛使用模板,组合,装饰和包含facelets提供的机制,这绝对是非常棒的,并且允许我们广泛地模块化我们的html。

我们不喜欢的一个“功能”是,如果我们在include或src属性中引用它们时我们的文件名或路径名出错,则页面根本不会呈现,只是一个没有写入的完整空白屏幕任何日志,没有抛出异常。这可能会妨碍调试。

提示这个问题的特殊情况是我们将应用程序从本地Windows机器升级到我们的unix升级测试机器。我们包含的一个片段在名称中包含一个小写的s而不是一个大写的S,并且指定的开发人员花了很长时间来修复它。

当找不到html片段时,有没有办法让facelets记录或抛出异常?

1 个答案:

答案 0 :(得分:2)

JSF 2.x会抛出FileNotFoundException。我现在没有Facelets 1.x游乐场环境,因此我无法为您测试,但理论上您应该能够通过{实现自定义Facelets资源解析器来捕获它{1}}检查DefaultResourceResolver方法中的null结果。

这样的事情:

resolveUrl()

要使其运行,请在web.xml中将其注册如下:

import com.sun.facelets.impl.DefaultResourceResolver;

public class CustomResourceResolver extends DefaultResourceResolver {

    @Override
    public URL resolveUrl(String resource) {
        URL url = super.resolveUrl(resource);

        if (url == null) {
            throw new FacesException(new FileNotFoundException(resource));
            // Perhaps add a logging statement instead if this exception
            // is after all actually completely swallowed for some reason.
        }

        return url;
    }

}