Prettyfaces程序化配置

时间:2013-10-19 16:26:49

标签: primefaces tomcat7 jsf-2.2 prettyfaces

问题

  1. 有没有办法以编程方式配置pretty-faces,而不使用pretty-config.xml文件?
  2. 如果必须使用pretty-config.xml;有没有办法以编程方式覆盖/扩充其UrlMapppings?
  3. 问题背景:

    在我的情况下,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

1 个答案:

答案 0 :(得分:0)

有一个名为ConfigurationProvider的SPI允许您实现自定义解决方案以提供PrettyFaces配置。 PrettyFaces在内部使用此SPI为XMLannotations等配置提供了不同的机制。但您也可以自己使用SPI来实现构建配置的自定义方法。

只需创建ConfigurationProvider的实现,然后将一个名为META-INF/services/com.ocpsoft.pretty.faces.spi.ConfigurationProvider的文件添加到您的类路径中,并在那里添加实现类的完整类名(有关此类文件,请参阅this exampleServiceLoader的javadocs,用于描述此插件机制。)