1

仲間、Web開発中に再び行き詰まりました。多くのオプションを選択するために、ユーザーに複数の選択リストを提供しています。JSF ページのフラグメント

<h:selectManyListbox id="associatedAS" value="#{maintainForm.selectedAS}">
    <s:selectItems value="#{maintainForm.associatedAS}" var="as" label="#{as.name}" />
    <rmc:asConverter />
</h:selectManyListbox>

しかし、問題は、ページを送信すると、コンソールでエラーが発生することです

sourceId=maintainForm:associatedAS[severity=(エラー 2)、summary=(maintainForm:associatedAS: 検証エラー: 値が無効です)、detail=(maintainForm:associatedAS: 検証エラー: 値が無効です)]

なぜこれが起こっているのか分かりません。リストに表示している項目は文字列ではないため、値を他のオブジェクトから文字列に、またはその逆に変換するためのコンバーター「asConverter」を作成しました。また、上記のタグ ' #{maintainForm.selectedAS} ' で指定した値は、リスト (selectedAS) 型です。

どんな種類の助けにも感謝します。

ありがとうございました。

4

2 に答える 2

3

私は Ravi Nikam と同じ問題を抱えていました。Equals メソッドとコンバーターが実装されており、 aでは問題selectOneMenuなく動作しますが、 a ではナイスValidation Error: Value is not validになりselectManyListBoxます。数時間検索した後、解決策を見つけました。にselectManyListbox基づいていjavax.faces.component.UISelectManyます。のjavadocはUISelectMany言う:

次のアルゴリズムを使用して Converter を取得します。
コンポーネントに Converter がアタッチされている場合は、それを使用します。
そうでない場合は、値の ValueExpression を探します (存在する場合)。ValueExpression は、次のものを指す必要があります。
* プリミティブの配列 (int[] など)。このプリミティブ型の登録済みのクラスごとのコンバーターを検索します。
* オブジェクトの配列 (Integer[] や String[] など)。基になる要素の型について、登録されたクラスごとの Converter を検索します。
* java.util.Collection. 値を変換しないでください。

したがって、このリストの最後のポイントは、「値を変換しないでください」という問題を引き起こしました。

私はfaces-config.xmlで指定しました

<converter>
    <converter-for-class>...
    <converter-class>...
</converter>

では、h:selectManyListboxコンバーターが指定されていませんでした。

faces-config.xml に追加して問題を解決しました

<converter-id>myConv</converter-id>

タグに属性converter="myConv"を追加します。h:selectManyListbox

于 2010-04-07T17:12:45.057 に答える
2

この問題は、ページにいくつかの値を送信した後、送信された元の値の一部またはすべてが変更された場合、またはいくつかの新しい値がクライアントに追加された場合に発生します。すでにご存知のように、JSFはサーバーまたはクライアントでビュー状態を維持し、構成方法によって異なるため、送信時にその状態を使用してコンポーネントを検証します。あなたの場合、クライアントに送信される値はもはや同じではないことがわかりました。したがって、このエラーが発生することになります。

カスタムコンバーターを使用している場合は、コンバーターのページで説明しているように、変換しようとしているオブジェクトに対して、動作するequalsメソッドを提供する必要があります。デフォルトのequalsメソッドを使用しようとしたり、実装をフラフしようとすると、オブジェクトが正しく変換されず、「検証エラー:値が無効です」という直感的でないエラーメッセージが表示されます。-参照:crazysquirrel.com

別の同様の提案

于 2009-11-20T06:57:54.653 に答える