私はすでにこの同じ問題について多くの質問をここで読みました、そしてそれは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ファイルからインポートされた行です。
これは、プログラムを使用して作成した行です。
これはデータベースでも同じです(したがって、コミットされます)。
これはSELECTです:
HTML:
SUCESS CASE(インポートされた行の選択):
エラーケース(作成された行の選択):
UPDATE 4 WOW!インポートした他のエンティティでテストしましたが、一部は機能しません。つまり、結論として、新しいエンティティは機能せず、一部のインポートされたエンティティは機能しません。データベースを見ると、それらはすべてすばらしいデータであり、欠落や違反はありません。とても奇妙です!
もう1つ..オートコンプリートコンポーネントを使用すると、機能します!!!! (すべてが機能します)