在我的情况下,mapppings必须来自另一个xml资源,并且还有一些额外的逻辑。所以我设计了以下解决方案 我实现了一个ServletContextAttributeListener,我监视PrettyFilter何时将prettyConfig对象添加到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
答案 0 :(得分:0)
有一个名为ConfigurationProvider的SPI允许您实现自定义解决方案以提供PrettyFaces配置。 PrettyFaces在内部使用此SPI为XML或annotations等配置提供了不同的机制。但您也可以自己使用SPI来实现构建配置的自定义方法。
只需创建ConfigurationProvider
的实现,然后将一个名为META-INF/services/com.ocpsoft.pretty.faces.spi.ConfigurationProvider
的文件添加到您的类路径中,并在那里添加实现类的完整类名(有关此类文件,请参阅this example) ServiceLoader的javadocs,用于描述此插件机制。)