【发布时间】:2013-03-12 10:32:37
【问题描述】:
我有一个 JSF 2 应用程序,其中包含一个 jar 文件,该文件又在其 META-INF 目录中包含一个 faces-config.xml。 faces-config.xml 包含一个阶段监听器的声明。我想在不修改 jar 文件本身的情况下阻止安装此阶段侦听器。 这可能吗?
【问题讨论】:
我有一个 JSF 2 应用程序,其中包含一个 jar 文件,该文件又在其 META-INF 目录中包含一个 faces-config.xml。 faces-config.xml 包含一个阶段监听器的声明。我想在不修改 jar 文件本身的情况下阻止安装此阶段侦听器。 这可能吗?
【问题讨论】:
您不能阻止第 3 方 JAR 中 faces-config.xml 的特定部分被解释。
你基本上有两个选择:
通过将 metadata-complete="true" 添加到 webapp 自己的 faces-config.xml 来阻止第 3 方 JAR 中的整个 faces-config.xml 被解释。
<faces-config ... metadata-complete="true">
请注意,这也会跳过第 3 方 JAR 类中的注释扫描。你基本上需要重新定义你想在 webapp 自己的faces-config.xml 中使用的特定部分。
通过LifecycleFactory 提供自定义Lifecycle 实现,您在webapp 的faces-config.xml 的<factory><lifecycle-factory> 中注册。在该实现中,相应地覆盖addPhaseListener() 以执行例如在跳过或继续之前检查instanceof。
【讨论】: