【问题标题】:Prevent installation of a phase listener from included jar in jsf 2防止从 jsf 2 中包含的 jar 安装阶段侦听器
【发布时间】:2013-03-12 10:32:37
【问题描述】:

我有一个 JSF 2 应用程序,其中包含一个 jar 文件,该文件又在其 META-INF 目录中包含一个 faces-config.xml。 faces-config.xml 包含一个阶段监听器的声明。我想在不修改 jar 文件本身的情况下阻止安装此阶段侦听器。 这可能吗?

【问题讨论】:

    标签: jsf jsf-2


    【解决方案1】:

    您不能阻止第 3 方 JAR 中 faces-config.xml 的特定部分被解释。

    你基本上有两个选择:

    1. 通过将 metadata-complete="true" 添加到 webapp 自己的 faces-config.xml 来阻止第 3 方 JAR 中的整个 faces-config.xml 被解释。

      <faces-config ... metadata-complete="true">
      

      请注意,这也会跳过第 3 方 JAR 类中的注释扫描。你基本上需要重新定义你想在 webapp 自己的faces-config.xml 中使用的特定部分。


    2. 通过LifecycleFactory 提供自定义Lifecycle 实现,您在webapp 的faces-config.xml&lt;factory&gt;&lt;lifecycle-factory&gt; 中注册。在该实现中,相应地覆盖addPhaseListener() 以执行例如在跳过或继续之前检查instanceof

    【讨论】:

    • 选项 2 对我来说可能是最简单的事情,考虑到我想要正常运行多个其他 3rd 方库。
    • 第三个选项,超出您的控制范围,是向库供应商发布功能请求,要求阶段侦听器在例如以下情况时跳过其工作。是否存在某个上下文参数、请求参数、会话属性,甚至是环境变量,具体取决于阶段侦听器的实际工作/职责。
    猜你喜欢
    • 1970-01-01
    • 2011-11-28
    • 2016-04-05
    • 2012-04-01
    • 2012-10-17
    • 1970-01-01
    • 2021-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多