我不确定这在 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) 的接口。 .. ETC ...
当从 ChildModel.getNumber() 中移除对父设置的属性的依赖时(通过移除@ModelAttribute("numbers") List<Integer> numbers
参数),两个模型属性方法都会被调用。但是,ParentModel.getNumbers() 总是在 ChildModel.getNumber() 之前调用。
请让我知道我是否遗漏了一些东西以使其完全正常工作,或者这是不可能的。
提前致谢!
编辑:
经过一些更多的实验,似乎不支持让模型属性依赖于其他模型属性。我将两个模型属性方法都放入了 ParentModel 中,它充其量只能偶尔工作......偶尔的行为可能是由于反射返回方法的顺序。当 ParentModel.getNumbers() 在 ChildModel.getNumber() 之前调用时(理想的顺序),它可以正常工作。发现这一点后,我的后续问题是:有没有办法指定调用模型属性方法的顺序?