问题
- 有没有什么方法可以在不使用 pretty-config.xml 文件的情况下以编程方式配置漂亮的面孔?
- 如果必须使用 pretty-config.xml 则;有没有办法以编程方式覆盖/增加其 UrlMapppings?
问题背景:
在我的情况下,映射必须来自另一个 xml 资源,并且有一些额外的逻辑。因此,我设计了以下解决方案,我实现了一个 ServletContextAttributeListener,我在其中监视 PrettyConfig 对象何时被 PrettyFilter 添加到 servlet 上下文中
@Override
public void attributeAdded(ServletContextAttributeEvent event) {
Object value = event.getValue();
if(value != null && value instanceof PrettyConfig){
PrettyConfig prettyConfig = (PrettyConfig)value ;
try {
PrettyFacesConfigProvider provider = new PrettyFacesConfigProvider() ;
PrettyConfig config = provider.loadConfiguration(event.getServletContext());
prettyConfig.setMappings(config.getMappings());
} catch (Exception ex) {
Logger.getLogger(CRSWebListener.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
PrettyFacesConfigProvider
class 是构建我的自定义映射配置的实现。我检查了更新的配置,似乎所有映射都已正确添加。但是,如果我采取这条路线,映射不会产生任何影响。当然,如果我将映射放在 pretty-config.xml 中,它就可以完美地工作。
我正在使用漂亮的面孔 3.3.3、jsf 2.2、素数面孔 4.0、tomcat 7