我们使用的是JSF 2.2,因此没有像2.3中那样的CDI。
我们正在使用PrimeFaces和一个第三方库,该库定义了我们必须使用的组件。
这些组件之一是日期选择器。在日期选择器的xhtml中,每个ajax都会调用一个javax.faces.convert.Converter
,就像<f:converter for="calendar" binding="#{myConverter}" />
一样。该转换器具有getAsString()
方法,该方法弄乱了我们的时区。几年来(1945-1949年从4月到9月),采摘的日子回溯了一天。当我选择08.07.1947时,失去焦点后,选择的日期将跳至07.07.1947。我确定了导致此行为的代码行。
第三方库中的javax.faces.convert.Converter
未定义为真正的转换器。没有@FacesConverter("someName")
批注,也没有
<converter>
<description>
Some description
</description>
<converter-id>MyConverter</converter-id>
<converter-class>
com.MyConverter
</converter-class>
</converter>
它只有一个@ViewScoped
和一个@Named
注释。
我现在正在尝试编写自己的转换器,而不是有缺陷的转换器。
我将整个类复制到我们的项目中(相同的类名称和相同的包名称),然后删除了有缺陷的代码行,这弄乱了时区。
现在,正如预期的那样,我收到了WELD-001414: Bean name is ambiguous
异常。
我尝试了Spring的@Spezializes
和@Primary
注释,因为我认为是JSF托管bean,所以它不起作用。
TL; DR 如何使用我自己的bean版本覆盖第3方库中的JSF受管bean?