多くの投稿を読みましたが、解決策が見つかりませんでした。
Utenteというオブジェクトがあります。
UtenteにはautorizzazioniListaというフィールドがあります
public class Utente{
...
@OneToMany(mappedBy = "utente", fetch = FetchType.EAGER)
@Cascade(CascadeType.ALL)
private List<Autorizzazioni> autorizzazioniLista;
...
}
Autorizzazioniにはid、utente、autorizzazioneの 3 つのフィールドがあります。
public class Autorizzazioni {
...
@Id
@GeneratedValue
@Column(name = "id")
private int id;
@ManyToOne(targetEntity = Utente.class, fetch = FetchType.EAGER)
private Utente utente;
@ManyToOne(targetEntity = Autorizzazione.class, fetch = FetchType.EAGER)
private Autorizzazione autorizzazione;
...
}
そしてこれがアウトリザツィオーネ
public class Autorizzazione{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id", nullable=false, updatable=false)
private int id;
@Column(name = "descrizione")
private String descrizione;
}
Utenteを modelAttributeとするフォームがあります。このフォームでは、フィールドautorizzazioniListaのオブジェクトAutorizzazioniをチェックボックスとして表示する必要があります。ここで私の問題を始めます。
これは、チェックボックスを表示する jsp ページです。
<form:checkboxes
items="${utente.autorizzazioniLista}"
path="autorizzazioniLista"
itemValue="id" delimiter="<br><br>"
itemLabel="autorizzazione.descrizione" />
フォームを送信してコントローラー内のオブジェクト Utente を取得すると 、フィールドautorizzazioniLista内のオブジェクトAutorizzazioniの相対フィールドUtenteとAutorizzazioneが null に設定されているため、DB に保存できません。
null ではないAutorizzazioniオブジェクトの唯一のフィールドはidです。これは、タグ内でオブジェクトAutorizzazioniのID<form:checkboxes>
として設定されているためです。itemValue
注: もちろん、タグ内の AutorizzazioniPropertyEditorSupport
オブジェクトを処理するために、拡張するクラスを使用します。<form:checkboxes>
それで、私の最後の質問は、オブジェクト Utente がコントローラー (フォームの送信後に呼び出されるもの) によって取得される前に、オブジェクト Autorizzazioni のフィールドを操作する方法はありますか?
コントローラー (フォームの送信後に呼び出されるコントローラー) 内で を使用@Valid Utente
したため、オブジェクト Utente のフィールドにエラーがあってはなりません。