私は同様の質問があることを知っています。それらの例はあまりにも断片的で不明瞭です。@ ModelAttributeと抽象クラス
POSTを送信するページのフォームからエンティティを編集する必要があります。標準的なメソッドは、コントローラ内のメソッドで、パラメータを@ModelAttributeおよびバリデータで使用します。 1つのフォームが抽象クラスのいくつかのサブクラスを提供する場合、必要なフィールドの生成に問題はありませんが、コントローラに問題があります。
私が理解しているように、@ModelAttributeはこのように動作します。目的のオブジェクトクラスを初期化し、要求のパラメータのフィールドを収集します。もちろん、オブジェクトが抽象クラスの場合、初期化することはできません。したがって、フォームには初期化するサブクラスを示すフィールドがあります。次に、コードの平和が必要です。この属性はこの属性を読み、正しいサブクラスを初期化します。それは何でしょうか?私はConverter、PrepertyEditor、WebDataBinderについての断片的な例を見ましたが、すべてをまとめるのは難しいです。
So.次の階層があります。
@RequestMapping (Path = "/ persons/uid {personId}/edit",
method = RequestMethod.GET)
public String editPerson (@PathVariable Integer personId, Model model) {
Person find = personDAO.read (personId);
model.addAttribute ("person", find);
return "editPerson";
}
@RequestMapping (Path = "/ persons/uid {personId}/edit",
method = RequestMethod.POST)
public String editPersonPost (@PathVariable Integer personId,
@Valid @ModelAttribute ("Person") Person person,
BindingResult result) {
if (result.hasErrors()) return "editPerson error = true?";
personDAO.update (person);
return "redirect:/persons/uid" + personId + "saved = true?";
}
とJSPはフォームであり:
public abstract class Person {role, name, email, password ...}
public class Student extends Person {}
public class Lecturer extends Person {}
その中のコントローラおよび方法はあり
また、コンバータは持っています書かれているが、それが必要であるかどうか、あるいは他のクラスを継承しているかどうかは疑問だ。
public class PersonConverter implements Converter <String, Person> {
public Person convert (String personType) {
Person person = null;
switch (personType) {
case "Student":
person = new Student();
break;
case "Lecturer":
person = new Lecturer();
break;
default:
throw new IllegalArgumentException (
"Unknown person type:" + personType);
}
return person;
}}
何かが欠落しているにもかかわらず、それはリクエストパラメータから
person_type
を取り、コンバータにそれを与える方法であり、そしてそれは、コントローラを介したメソッドの結果を返しますConversionService
<bean class="org.springframework.context.support.ConversionServiceFactoryBean"
id="theConversionService">
<property name="converters">
<list>
<bean class="schedule.service.PersonConverter"></bean>
</list>
</property>
</bean>
<mvc:annotation-driven conversion-service="theConversionService" validator="validator"/>
に登録されている
自動バインディングメカニズム
お願いします。