2

私はすでにこの同じ問題について多くの質問をここで読みました、そしてそれはEQUALsメソッドではなく、またBeanスコープとしての問題ではないことを保証できます。だから、何が起こっているのか見てみましょう。

私はこのselectOneを持っています、それは「部分的に」機能しています

                <p:selectOneMenu id="acao" converter="#{acaoConverter}" value="#{prospectoRadarController.acaoSelecionada}">
                    <f:selectItem itemLabel="#{msg['label.selecione.item']}" itemValue="" />
                    <f:selectItems var="a" itemValue="#{a}" itemLabel="#{a.descricao}" value="#{acaoController.listarAcoesEmAberto()}" />
                </p:selectOneMenu>

だから私は「Acao」エンティティを持っています。selectのHTMLも正しいため、すべてのエンティティは完全に有効です(値はエンティティの正しいIDです)。

(SQLファイルを使用して)インポートしたデータは、最後の2行を確認します。

            INSERT INTO com_acao VALUES (190, 0.00, '2012-12-31', '2012-12-31', '2012-12-31', 'SELECIONADOS 2012-1', 0, 1, 1);
            ALTER SEQUENCE com_acao_id_seq RESTART WITH 191;

では、新しいエンティティを挿入すると、正しいIDで正しく挿入され、すべてが正常に機能します。

問題:そのSelectOneMenuで、SQLファイルとともにインポートされたエンティティを選択すると機能します。システムを使用して保存した新しいエンティティを選択すると、次のようになります。

  javax.faces.component.UISelectOne.INVALID

検証エラー。繰り返しになりますが、equalsは壊れていません。私の最善の策は、これが休止状態に関連しているということです。しかし....どうしてそれがエンティティを追加、フィルタリング、検索し、エラーが発生しないのでしょうか?検証エラーのみが発生していますか?:(

これはエンティティID宣言です。

   public class Acao {

     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Integer id;

ありがとう !私のリポジトリはSpringDataのPagingAndSortingインターフェースです。これが関連情報かどうかはわかりません...情報が必要な場合は、質問してください。再度、感謝します!

UPDATESelectItems に表示される「Acao」のリストをロードするメソッド:

public List<Acao> listarAcoesEmAberto() {
    return acaoService.listarAcoesEmAberto();
}

このクエリは次のように実行されます。

@Query("select a from Acao a where a.dataFinal is null OR current_date() <= a.dataFinal")
public List<Acao> listarAcoesEmAberto();

UPDATE 2コンバーターメソッド:

@SuppressWarnings("unchecked")
@Override
public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
    if (arg2 == null || arg2.equals("")) {
        return null;
    }

    try {
        return baseService.findOne((PK) new SimpleTypeConverter().convertIfNecessary(arg2, ReflectUtil.getPrimaryKeyField(entityClass).getType()));
    } catch (TypeMismatchException e) {
        return null;
    }
}

@Override
public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
    if (arg2 == null) {
        return "";
    }

    return arg2.toString();
}

注:これは汎用コンバーターです。実際のコンバーターは次のとおりです。

@Component @Scope( "request")public class AcaoConverter extends BaseConverterimplements Serializable {

private static final long serialVersionUID = 1L;

@Autowired
public AcaoConverter(AcaoService acaoService) {
    super(acaoService, Acao.class); 
}

したがって、すべてのエンティティに対して同じコンバーターです。そしてそれは動作します。なぜこの特定のケースではないのですか?:(

UPDATE3問題をよりよく理解しましょう...

これは、SQLファイルからインポートされた行です。 a

これは、プログラムを使用して作成した行です。 2

これはデータベースでも同じです(したがって、コミットされます)。 3

これはSELECTです: 4

HTML: 5

SUCESS CASE(インポートされた行の選択): 6

エラーケース(作成された行の選択): 7

UPDATE 4 WOW!インポートした他のエンティティでテストしましたが、一部は機能しません。つまり、結論として、新しいエンティティは機能せず、一部のインポートされたエンティティは機能しません。データベースを見ると、それらはすべてすばらしいデータであり、欠落や違反はありません。とても奇妙です!

もう1つ..オートコンプリートコンポーネントを使用すると、機能します!!!! (すべてが機能します)

4

1 に答える 1

0

上手、

selectOneMenuの解決策はありません。そこで、ドロップダウン付きのオートコンプリートを使用しました(true)。

正常に動作します。

したがって、これは実際には解決策ではありませんが、回避策です。助けてくれてありがとう。

于 2013-02-04T15:20:00.577 に答える