私はリッチコンテンツを表示するためにレンダリングできるテキストの部分である多数の '要素'を特徴とするドメインモデルを持っています。 HTMLテキスト、テキスタイルテキスト、Flashオブジェクトなどがあります。これらの要素の基本的な機能はAbstractElement
にカプセル化されており、実装はHTMLElement
,FlashElement
などとなっています。したがってモデルには、持つことができるすべての要素を含むList<AbstractElement>
があります。ジェネリックの自動募集リスト
モデルを編集するときに、ユーザーがフォームをサブミットするときに、ユーザーが要素を動的に追加して保存できるようにします。それでは、私が持っていることは、次の形式になり、いくつかのJavaScriptと動的に拡張可能な形式である:
<form action=...>
<!-- Other attributes -->
<textarea name="object.elements[0].content"/>
<textarea name="object.elements[1].content"/>
<!-- Some elements are based on text, others on files -->
<input type="hidden" name="object.elements[2].file" value="somevalue"/>
<textarea name="object.elements[3].content"/>
<!-- Submit button -->
</form>
フォームの送信時にこれがうまくいきません。なぜ、提出されたとき、Springはリスト内の必須要素をインスタンス化しようとしますか?要素のリストには抽象型のAbstractElement
のオブジェクトが含まれているため、Springは新しい要素をインスタンス化できません。
Springが適切なタイプの要素をインスタンス化する方法は?フォームに型情報を追加して、ModelAttributeでそれを行うことができますか?それはどのように機能しますか?これを自動的に行うモデルでできることはありますか?
Javaオブジェクトに単一のテキスト値(日付形式など)を処理するPropertyEditorはありませんか?リクエストパラメータを追加するにはどうすればよいですか? – DCKing
あなたの質問から、エンドユーザーがHTMLフォームにさまざまなテキストエリアを入力して送信していたようです。投稿時には、各テキストエリアの内容に基づいて、インスタンス化するオブジェクトの正しいタイプを何らかの形で決定したいと思っていました。 PropertyEditorを使用すると、文字列と任意のタイプのオブジェクトの間で変換を行うことができますので、それがうまくいくと思います。私がフォームを正しく理解していない場合は、より詳細な情報を提供してください。 – khill
サンプルフォームでわかるように、要素には 'content'属性が付いていることは確かではありません。代わりに 'file'属性を持つことができます。 PropertyEditorはそれを聞くことができませんでした。さらに、異なるタイプのテキストベースのコンテンツは、文字列の内容に基づいて必要に応じて区別することができない。 – DCKing