2

selectOneMenuを使用して単純な複合コンポーネントを作成しようとしています...それは本当に単純です:

<cc:implementation>
    <h:panelGrid columns="2">
        <p:outputLabel for="#{cc.attrs.fieldId}" value="#{cc.attrs.fieldLabel}"/>
        <p:selectOneMenu id="#{cc.attrs.fieldId}" required="#{cc.attrs.required}" converter="#{cc.attrs.converter}" value="#{cc.attrs.targetValue}">
                <f:selectItem itemLabel="#{msg['label.selecione.item']}" itemValue="" />
                <f:selectItems value="#{cc.attrs.listValue}"/>
        </p:selectOneMenu>
    </h:panelGrid>          
</cc:implementation>

だから、問題は私がコンバーターを通過させようとしているときです!これはENUMコンバーターです(@FacesConverter(value = "tipoCampoConverter")アノテーションでEnumConverterを拡張します)

エラーは次のとおりです。javax.el.E​​LException:タイプクラスjava.lang.StringのtipoCampoConverterをインターフェースjavax.faces.convert.Converterに変換できません

**編集:

いくつかの追加情報:

'type'がある場合とない場合で属性を宣言しようとしました:

    <cc:attribute name="converter" required="true" type="javax.faces.convert.Converter"/>

さらに詳しい情報:情報:サーブレットエンジンの起動:Apache Tomcat / 7.0.12情報:Mojarra 2.1.10の初期化情報:PrimeFaces 3.4.2で実行情報:PrimeFacesExtensions0.6.1で実行

:)

4

1 に答える 1

7

値がの場合、属性はデフォルトでインスタンスをconverter期待します。このようなもの。コンポジットでのこの非直感的な動作は、残念ながら「設計による」ものです。ConverterValueExpression<h:inputText converter="#{bean.converter}">

あなたの最善の策は、<f:converter>代わりに使用することです。

<p:selectOneMenu ...>
    ...
    <f:converter converterId="#{cc.attrs.converter}" />
</p:selectOneMenu>

具体的な問題とは関係ありませんが、この特定のユース ケースではコンバーターはまったく必要ありません。JSF には組み込みの enum コンバーターが既にあります。UISelectManyコンポーネントをList<E>ではなく にバインドする場合にのみ、このコンバーターが必要ですE[]

以下も参照してください。

于 2012-12-22T17:45:47.520 に答える