Jsf 2 升级Omnifaces-重复验证程序ID

Jsf 2 升级Omnifaces-重复验证程序ID,jsf-2,jboss7.x,cdi,mojarra,omnifaces,Jsf 2,Jboss7.x,Cdi,Mojarra,Omnifaces,我有一个绑定为ear文件的JavaEE6项目,其中包含两个WebWAR归档文件。两者都使用全向面。今天,我将Omnifaces升级到最新版本1.6。但现在我不能再部署了。我得到了以下例外: java.lang.IllegalArgumentException: Registering validator 'class org.omnifaces.validator.RequiredCheckboxValidator' failed, duplicates validator ID 'omnifa

我有一个绑定为ear文件的JavaEE6项目,其中包含两个WebWAR归档文件。两者都使用全向面。今天,我将Omnifaces升级到最新版本1.6。但现在我不能再部署了。我得到了以下例外:

java.lang.IllegalArgumentException: Registering validator 'class org.omnifaces.validator.RequiredCheckboxValidator' failed, duplicates validator ID 'omnifaces.RequiredCheckboxValidator' of other validator 'class org.omnifaces.validator.RequiredCheckboxValidator'.
    at org.omnifaces.cdi.validator.ValidatorExtension.processValidators(ValidatorExtension.java:73)
...
我的环境: JBossAS 7.1.1/Omnifaces 1.6/JSF Mojarra 2.1.26/Primefaces 3.5


THX。此错误已在1.6.1中修复。这个bug背后有很多故事,所以我就写了一篇博客:

总结:CDI上下文不是战争范围,而是耳朵范围。至于您面临的特殊异常,这是因为只有一个CDI
ValidatorExtension
从一个WAR加载,然后应用到全耳,从而处理两个WAR中的所有
@FacesValidator
类,而不是从其中加载CDI扩展的WAR


请注意,这在OmniFaces中不是问题。这是CDI在EAR中的工作方式存在的问题。

您确定已正确删除旧版本并清理服务器的工作文件夹吗?是的。我已经删除了部署/tmp/data目录中的所有文件。好的。似乎同一个EAR的两次战争都共享相同的CDI上下文。我创建了一个问题报告:这是一个CDI规范问题,因为它不是100%清楚EAR部署是如何工作的,请尝试使用JBoss7.2或WildFly,后者有更新版本的Weld,在某种程度上解决了这一问题。