1

在 IBM 门户服务器 6.1 之上使用 JSF 1.2 和 Facelets 1.x

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

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

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

当找不到 html 片段时,有什么方法可以让 facelets 记录或抛出异常?

4

1 回答 1

2

JSF 2.x 对此提出了质疑FileNotFoundException。我现在没有 Facelets 1.x 游乐场环境,所以我无法为您测试它,但理论上您应该能够通过实现自定义 Facelets 资源解析器来捕获它,通过DefaultResourceResolver该解析器检查方法中的null结果resolveUrl().

像这样的东西:

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;
    }

}

要让它运行,请在 web.xml 中按如下方式注册它:

<context-param>
    <param-name>facelets.RESOURCE_RESOLVER</param-name>
    <param-value>com.example.CustomResourceResolver</param-value>
</context-param>
于 2012-06-21T13:24:15.227 回答