0

问题

  1. 有没有什么方法可以在不使用 pretty-config.xml 文件的情况下以编程方式配置漂亮的面孔?
  2. 如果必须使用 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);
        }
    }
}

PrettyFacesConfigProviderclass 是构建我的自定义映射配置的实现。我检查了更新的配置,似乎所有映射都已正确添加。但是,如果我采取这条路线,映射不会产生任何影响。当然,如果我将映射放在 pretty-config.xml 中,它就可以完美地工作。

我正在使用漂亮的面孔 3.3.3、jsf 2.2、素数面孔 4.0、tomcat 7

4

1 回答 1

0

有一个名为ConfigurationProvider的 SPI ,它允许您实现自定义解决方案来提供 PrettyFaces 配置。PrettyFaces 在内部使用这个 SPI 来提供不同的配置机制,比如XML注释。但是您也可以自己使用 SPI 来实现构建配置的自定义方式。

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

于 2013-10-20T09:15:21.343 回答