我正在尝试在我的控制器中进行依赖注入,而不是使用 setters 方法,但它不起作用。
我想要什么:只需在使用 springframework 3.1 的控制器类中将域模型与我的表单绑定。
我的域类:
public class Person {
private String name;
@Autowired
public Person(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
我的jsp(person-get):
<form action="test-person" method="post">
<table cellpadding="0" cellspacing="0" align="center">
<tr>
<td> <b> NAME: </b> </td>
<td> <input type="text" id="name" name="name"> </td>
</tr>
</table>
</form>
我的控制器:
@Controller
public class PersonController {
@RequestMapping(value = "test-person", method = RequestMethod.GET)
public String loadViewGet() {
return "person-get";
}
@RequestMapping(value = "test-person", method = RequestMethod.POST)
public String doPost(Person person, Model model) {
model.addAttribute("person", person);
return "person-post";
}
}
最后一个jsp显示用户输入的人名(person-post):
<table cellpadding="0" cellspacing="0" align="center">
<tr>
<td> <b> NAME: </b> </td>
<td> ${person.name} </td>
</tr>
</table>
抛出的异常:
java.lang.NoSuchMethodException: models.Person.<init>()
java.lang.Class.getConstructor0(Unknown Source)
java.lang.Class.getDeclaredConstructor(Unknown Source)
org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:104)
org.springframework.web.method.annotation.ModelAttributeMethodProcessor.createAttri bute(ModelAttributeMethodProcessor.java:132)
org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodPr ocessor.createAttribute(ServletModelAttributeMethodProcessor.java:81)
org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgu ment(ModelAttributeMethodProcessor.java:103)
org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resol veArgument(HandlerMethodArgumentResolverComposite.java:75)
org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValu es(InvocableHandlerMethod.java:156)
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(Invo cableHandlerMethod.java:117)
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod .invokeAndHandle(ServletInvocableHandlerMethod.java:96)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter. invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter. handleInternal(RequestMappingHandlerAdapter.java:578)
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(Abst ractHandlerMethodAdapter.java:80)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java :923)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java: 852)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.ja va:882)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
br.gov.sp.mococa.filtros.FiltroDeConexao.doFilter(FiltroDeConexao.java:31)
我认为spring正在寻找一个默认的构造函数,没有参数。为什么会发生?
谢谢!