如何停用 JSF 标签 (Primefaces)

How to deactivate a JSF tag (Primefaces)

我为我的 UI 使用 Primefaces 5.x(在 myFaces 2.2.x),我想禁用/停用一些 JSF 标签以避免错误。

我可以使用黑名单或白名单吗?

标准中没有这样的东西 JSF/PrimeFaces API.

Quick'n'dirty 解决方法将覆盖 webapp faces-config.xml 中的组件注册,您可以将组件 class 设置为非 UIComponent class(它最终会在使用时抛出 ClassCastException),或者抛出例如 UIComponent 的自定义 UIComponent IllegalArgumentException 在其构造函数中。

例如如果您想避免使用 <p:selectOneMenu> component which has a component type of org.primefaces.component.SelectOneMenu:

<component>
    <component-type>org.primefaces.component.SelectOneMenu</component-type>
    <component-class>java.lang.Object</component-class>
</component>

另一种方法是 在构建之后检查每个组件 class 与 Set<Class<UIComponent>> 中的 white/black 列表。

一个更干净的替代方法是 根据 white/black 列表检查组件类型。

另一种选择是编辑 PrimeFaces taglib/config XML 以删除不需要的组件并重建 JAR。