在IBM门户服务器6.1上使用带有Facelets 1.x的JSF 1.2
我们正在广泛使用模板,组合,装饰和包含facelets提供的机制,这绝对是非常棒的,并且允许我们广泛地模块化我们的html。
我们不喜欢的一个“功能”是,如果我们在include或src属性中引用它们时我们的文件名或路径名出错,则页面根本不会呈现,只是一个没有写入的完整空白屏幕任何日志,没有抛出异常。这可能会妨碍调试。
提示这个问题的特殊情况是我们将应用程序从本地Windows机器升级到我们的unix升级测试机器。我们包含的一个片段在名称中包含一个小写的s而不是一个大写的S,并且指定的开发人员花了很长时间来修复它。
当找不到html片段时,有没有办法让facelets记录或抛出异常?
答案 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;
}
}