有很多开发人员和大量的青少年我想禁用某些组件,例如<p:spacer>
,禁止使用组件来解决html / css问题。我想基本上将omnifaces / primefaces / richfaces等库的可用组件限制为白名单/黑名单。
对于像omnifaces这样的库,这是一个合理的功能请求,还是难以构建/本地化?
答案 0 :(得分:4)
基本上,您可以通过提供自定义Application
实施(基于ApplicationWrapper
)来实现此目的,其中您覆盖the desired createComponent()
method并投掷,例如当传递列入黑名单的组件类型和/或渲染器类型时,IllegalArgumentException
。
这是一个启动示例:
public class YourApplication extends ApplicationWrapper {
private static final Set<String> BLACKLISTED_COMPONENT_TYPES = unmodifiableSet(new HashSet<>(asList(
"org.primefaces.component.Spacer",
"com.example.SomeComponentType",
"com.example.OtherComponentType"
// Etc..
)));
private final Application wrapped;
public YourApplication(Application wrapped) {
this.wrapped = wrapped;
}
@Override
public UIComponent createComponent(FacesContext context, String componentType, String rendererType) {
if (BLACKLISTED_COMPONENT_TYPES.contains(componentType)) {
throw new IllegalArgumentException("You are not allowed to use this component.");
}
return super.createComponent(context, componentType, rendererType);
}
@Override
public Application getWrapped() {
return wrapped;
}
}
您可以使用此工厂运行它:
public class YourApplicationFactory extends ApplicationFactory {
private final ApplicationFactory wrapped;
public YourApplicationFactory(ApplicationFactory wrapped) {
this.wrapped = wrapped;
}
@Override
public Application getApplication() {
return new YourApplication(wrapped.getApplication());
}
@Override
public void setApplication(Application application) {
wrapped.setApplication(application);
}
}
在faces-config.xml
注册的内容如下:
<factory>
<application-factory>com.example.YourApplicationFactory</application-factory>
</factory>
答案 1 :(得分:1)
您可以使用jsf的标记文件功能。您将为要使用的每个组件声明标记文件。之后,您的团队将只在您的项目中使用这些标记文件。