Spring MVCのフォーム:selectタグ、複数の選択が正しく結合しませんか?
-
22-08-2019 - |
質問
私は、既存のデータベースの行を編集するためのフォームを作成しようとしています。私は、フォームのバッキングオブジェクトにHTMLをバインドautoにSpring MVCのフォームタグを使用しています。行は、私は、フォームを使用して複数の選択ボックスで表現しようとしている別のテーブルとの多くの関係に多くを持っています。selectタグと、
<form:select path="rules">
<form:options items="${bundle.rules}" itemValue="name" itemLabel="name"/>
</form:select>
の関係がバンドルPOJO内部のHashSetのよう表現しているので、私は永続化のためにHibernateを使用しています。
private Set<Rule> rules = new HashSet<Rule>(0);
ページ上の選択ボックスがなければ、オブジェクトは、データベースに正しくアップデートされますが選択ボックスを持つオブジェクトは、データベースに更新されませんし、私は私のlog4jログにこのエラーを取得しています、このエラーではないことに注意してください例外を引き起こし、それがログにのみ表示され、
DEBUG org.springframework.web.servlet.mvc.SimpleFormController.processFormSubmission(SimpleFormController.java:256) - Data binding errors: 1
これは関係なく、私が選択ボックス内の項目の選択を解除枯れの発生した、フォーム全体が正常に提出することを拒否しました。誰も私を助けることができますか?
私は私はコレクションは、この質問に似ているのSpring MVC に、フォームに属性残念ながら提案のどれも私の問題に便利なように見えたんバインドします。
解決
問題は、フォームの提出です。春は、コマンドのオブジェクトを結合することができないので、フォームを送信しませんが、代わりに、FormViewコントロールにリダイレクトします。
結合が正常に実行された場合、、あなたの代わりにこのメッセージが表示されます。
No errors -> processing submit
あなたの問題を解決するために、あなたはあなたのコントローラにCustomCollectionEditorを登録する必要があります。 (これはリンクを参照してください)。それはこのようなものになるだろう。
protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception
{
binder.registerCustomEditor(Set.class, "rules", new CustomCollectionEditor(Set.class)
{
protected Object convertElement(Object element)
{
String name = "";
if (element instanceof String)
name = (String) element;
return name != null ? new Rule(name) : null;
}
});
}