gpt4 book ai didi

java - Spring MVC 3.0 模型属性继承

转载 作者:行者123 更新时间:2023-12-01 17:34:49 31 4
gpt4 key购买 nike

我不确定这在 Spring MVC 3.0 中是否可行,但我正在尝试创建一个带注释的 Controller ,该 Controller 扩展另一个 Controller ,并且其模型属性取决于父级设置的模型属性。例如:

@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
}

}

到目前为止,我无法让它工作 - 它抛出以下异常:

Request processing failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [java.util.List]: Specified class is an interface] with root cause org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [java.util.List]: Specified class is an interface at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:101) at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveModelAttribute(HandlerMethodInvoker.java:762) ... etc ...

当从 ChildModel.getNumber() 中删除对父级设置的属性的依赖关系(通过删除 @ModelAttribute("numbers") List<Integer> numbers 参数)时,将调用两个模型属性方法。但是,ParentModel.getNumbers() 始终在 ChildModel.getNumber() 之前调用。

如果我缺少一些东西来使其完全正常工作,或者这是不可能的,请告诉我。

提前致谢!

编辑:

经过更多实验,似乎可能不支持模型属性依赖于其他模型属性。我将两个模型属性方法放入 ParentModel 中,它充其量只是偶尔工作...这种偶尔的行为可能是由于反射返回方法的顺序造成的。当 ParentModel.getNumbers() 在 ChildModel.getNumber() (理想的顺序)之前调用时,它可以正常工作。发现这一点后,我的后续问题是:有没有办法指定模型属性方法的调用顺序?

最佳答案

Spring 提示因为它无法实例化一个 List,这是一个接口(interface),尝试将其声明为 ArrayList (或 LinkedList )都是 List 接口(interface)的实现。

关于java - Spring MVC 3.0 模型属性继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7564908/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com