如何重写jsf托管bean

时间:2019-11-21 19:03:51

标签: spring jsf

我们使用的是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?

0 个答案:

没有答案