【问题标题】:Prettyfaces programmatic configurationPrettyfaces 程序化配置
【发布时间】:2013-10-28 09:31:37
【问题描述】:

问题

  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);
        }
    }
}

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

我正在使用 pretty-faces 3.3.3、jsf 2.2、prime-faces 4.0、tomcat 7

【问题讨论】:

    标签: primefaces tomcat7 jsf-2.2 prettyfaces


    【解决方案1】:

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

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

    【讨论】:

    • 其实我首先尝试了SPI技术;但无法使其工作。我上面的代码中的 PrettyFacesConfigProvider 类实际上是完全相同的 SPI 兼容实现。在您发表评论后,我再次尝试并成功了。它不起作用的原因是我将 spi 配置文件放在了错误的位置。我在资源目录中创建了一个META-INF/services,把文件放在那里然后宾果游戏!
    猜你喜欢
    • 1970-01-01
    • 2010-09-24
    • 2011-07-27
    • 1970-01-01
    • 2013-12-28
    • 2011-12-30
    • 1970-01-01
    • 2014-10-15
    相关资源
    最近更新 更多