これが Spring MVC 3.0 で可能かどうかはわかりませんが、別のコントローラーを拡張し、モデル属性が親によって設定されたモデル属性に依存する注釈付きコントローラーを作成しようとしています。例えば:
@Controller
public abstract class ParentModel {
@ModelAttribute("numbers")
protected List<Integer> getNumbers() {
return Arrays.asList(new Integer(1));
}
}
@Controller
public abstract class ChildModel extends ParentModel {
@ModelAttribute("number")
protected Integer getNumber(@ModelAttribute("numbers") List<Integer> numbers) {
return numbers.get(0);
}
}
@Controller
public class RequestHandler extends ChildModel {
@RequestMapping("/number")
public String items(@ModelAttribute("number") Integer number) {
return "number"; // number.jsp
}
}
これまでのところ、これを機能させることができませんでした。次の例外がスローされます。
リクエストの処理に失敗しました。ネストされた例外は org.springframework.beans.BeanInstantiationException: Bean クラスをインスタンス化できませんでした [java.util.List]: 指定されたクラスはインターフェイスです] 根本原因 org.springframework.beans.BeanInstantiationException: Bean クラスをインスタンス化できませんでした [java.util .List]: 指定されたクラスは、org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveModelAttribute(HandlerMethodInvoker.java:762) の org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:101) のインターフェースです。 ..など...
親によって設定された属性への依存が ChildModel.getNumber() から (パラメーターを削除することによって) 削除される@ModelAttribute("numbers") List<Integer> numbersと、両方のモデル属性メソッドが呼び出されます。ただし、ParentModel.getNumbers() は常に ChildModel.getNumber() の前に呼び出されます。
これを完全に機能させるために何か不足している場合、またはこれが不可能な場合はお知らせください。
前もって感謝します!
編集:
さらに実験を重ねた結果、モデル属性を他のモデル属性に依存させることはおそらくサポートされていないようです。両方のモデル属性メソッドを ParentModel に入れましたが、せいぜい散発的に機能します... 散発的な動作は、メソッドがリフレクションによって返される順序が原因である可能性があります。ParentModel.getNumbers() が ChildModel.getNumber() の前に (望ましい順序で) 呼び出されると、適切に機能します。これを発見したので、フォローアップの質問は次のとおりです。モデル属性メソッドが呼び出される順序を指定する方法はありますか?