2017-07-10 5 views
2

古いバージョンのomnifaces - 1.8.3を実行していましたが、今は最新の2.6.3にアップデートしました。 。omnifaces jarを更新しました。私のコンバータがあいまいであると言われました。

2017-07-10T16:32:46.631+0300|Warning: StandardWrapperValve[Faces Servlet]: Servlet.service() for servlet Faces Servlet threw exception 
org.jboss.weld.exceptions.AmbiguousResolutionException: WELD-001318: Cannot resolve an ambiguous dependency between: 
    - Managed Bean [class kamelon.ui.convertors.LoginConverter] with qualifiers [@Any @Default], 
    - Managed Bean [class kamelon.ui.convertors.IdentityHashCodeConverter] with qualifiers [@Any @Default], 
    - Managed Bean [class kamelon.ui.convertors.IdentifiableConvertor] with qualifiers [@Any @Default] 
    at org.jboss.weld.manager.BeanManagerImpl.resolve(BeanManagerImpl.java:1235) 
    at org.jboss.weld.util.ForwardingBeanManager.resolve(ForwardingBeanManager.java:91) 
    at org.jboss.weld.bean.builtin.BeanManagerProxy.resolve(BeanManagerProxy.java:115) 
    at org.omnifaces.util.BeansLocal.resolve(BeansLocal.java:77) 
    at org.omnifaces.cdi.converter.ConverterManager.createConverter(ConverterManager.java:122) 
    at org.omnifaces.cdi.converter.ConverterManager$Proxy$_$$_WeldClientProxy.createConverter(Unknown Source) 
    at org.omnifaces.application.OmniApplication.createConverter(OmniApplication.java:82) 
    at com.sun.faces.facelets.tag.jsf.ValueHolderRule$LiteralConverterMetadata.applyMetadata(ValueHolderRule.java:85) 
    at com.sun.faces.facelets.tag.MetadataImpl.applyMetadata(MetadataImpl.java:81) 
    at javax.faces.view.facelets.MetaTagHandler.setAttributes(MetaTagHandler.java:129) 
    at javax.faces.view.facelets.DelegatingMetaTagHandler.setAttributes(DelegatingMetaTagHandler.java:102) 
    at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.doNewComponentActions(ComponentTagHandlerDelegateImpl.java:491) 
.... 

を私は< P指定されている:(コンポーネント)> < F:> <コンバータ/問題は、私は本当にきちんと私が取得しています.xthml JSF

例外をデバッグする方法がわからないです多くのファイルでp :(コンポーネント)>を使用していますが、私は< p:(コンポーネント)converter = "" />に変更する必要があるのか​​どうか、新しいバージョンに追加する必要があるかどうかはわかりません。

新しいバージョンの問題は何か分かりませんが、誰かを助けることができますか?

ありがとうございます!

+0

plain jsfコンポーネントで同じ問題がありますか?これはxhtmlの問題ではなく、Beanの問題です。あなたはどこからでもインターフェイスを注入できますか? – Kukeltje

+0

別のコンバーターを拡張して再試行するコンバーターのサブクラスに '@ Specializes'を入れてください(http://showcase.omnifaces.org/cdi/FacesConverterも参照)。それでもまだ失敗した場合、使用されているサーバー/ JSF/CDIのバージョンについてもっと詳しく教えてください。 – BalusC

+0

私はそれを修正し、下記のソリューションを掲載しました。 –

答えて

0

org.omnifaces.converter.SelectItemsConverterを拡張しているコンバータのように見えますが、その例外はjavax.faces.convert.Converterを実装することで解決されました。理由は分かりません...

4

これは、Converterインターフェイスを直接実装する代わりに、既存の@FacesConverterを拡張する@FacesConverterがある場合に発生します。例えば

@FacesConverter("identifiableConverter") 
public class IdentifiableConvertor implements Converter {} 
@FacesConverter("identityHashCodeConverter") 
public class IdentityHashCodeConverter extends IdentifiableConvertor {} 
@FacesConverter("loginConverter") 
public class LoginConverter extends IdentityHashCodeConverter {} 

この方法であなたはIdentifiableConvertorのインスタンスのCDIを頼むとき、CDIは、ユーザーの意図を正確にどちらかを知りません。どちらもIdentifiableConvertorフィールドに割り当てることができるので、IdentityHashCodeConverterまたはLoginConverterとすることができます。これはあいまいです。

これは、サブクラスに@Specializesを入れることで解決できます。

@FacesConverter("identifiableConverter") 
public class IdentifiableConvertor implements Converter {} 
@FacesConverter("identityHashCodeConverter") 
@Specializes 
public class IdentityHashCodeConverter extends IdentifiableConvertor {} 
@FacesConverter("loginConverter") 
@Specializes 
public class LoginConverter extends IdentityHashCodeConverter {} 

CDIはIdentityHashCodeConverterだけIdentityHashCodeConverterフィールドに割り当てる必要があるとLoginConverterだけLoginConverterフィールドに割り当てされなければならないことを知っているこの方法です。 IdentifiableConvertorを今質問すると、CDIはIdentityHashCodeConverterまたはIdentityHashCodeConverterになることができないことを知っているので、曖昧さのないIdentifiableConvertorしか利用できません。

また、スーパークラスを削除して、裸のConverterインターフェイスを直接実装することもできます。しかし、これはDRYではありません。

+0

CDIの定義に失敗しました:WELD-000047:別のBeanを拡張する必要があるBean:Managed Bean [クラスkamelon.ui.convertors.IdentifiableConvertor]修飾子付き[@Any @Default] org.omnifaces.converter.SelectItemsConverter; –

+0

beans.xmlはどのように見えますか? 'bean-discovery-mode =" all "'で? – BalusC

+0

私はCDI 1.0を実行しているので、私はそれを持つことができません –

関連する問題