Java 如何使用@modeldattribute从JSP表单将列表绑定到控制器
我正在尝试使用@modeldattribute及其各自的id和blurb向我的控制器获取所选候选人的列表。我能够正确地带来一个候选人,但我不知道如何通过。。。我试图添加列表,如下所示,但我得到了 错误- 严重:路径为[/panel requests]的上下文中Servlet[dispatcher]的Servlet.service()引发异常[请求处理失败;嵌套异常为org.springframework.beans.BeanInstantiationException:无法实例化bean类[java.util.List]:指定的类是接口],其根本原因是 org.springframework.beans.BeanInstantiationException:无法实例化bean类[java.util.List]:指定的类是接口 JSP-Java 如何使用@modeldattribute从JSP表单将列表绑定到控制器,java,jsp,spring-mvc,Java,Jsp,Spring Mvc,我正在尝试使用@modeldattribute及其各自的id和blurb向我的控制器获取所选候选人的列表。我能够正确地带来一个候选人,但我不知道如何通过。。。我试图添加列表,如下所示,但我得到了 错误- 严重:路径为[/panel requests]的上下文中Servlet[dispatcher]的Servlet.service()引发异常[请求处理失败;嵌套异常为org.springframework.beans.BeanInstantiationException:无法实例化bean类[ja
<form:form modelAttribute="candidateAddAttribute"
action="/panel-requests/requests/${panelRequestForId.id}/empl" method="post">
<c:forEach items="${candidates}" var="candidates">
<select name="employee" id="employee" disabled="disabled">
<option value="default" selected="selected">${candidates.candidateName}</option>
</select>
<textarea rows="3" cols="40" id="candidateBlurb" name="candidateBlurb"
disabled="disabled">${candidates.candidateBlurb}</textarea>
<textarea rows="2" cols="20" id="candidateCV" name="candidateCV"
disabled="disabled">${candidates.candidateCV}</textarea>
</c:forEach>
<div id="candidateDiv" id="candidateDiv">
<select name="employee" id="employee">
<option value="default" selected="selected">Select Employee</option>
<c:forEach items="${employees}" var="employee">
<option value="${employee.id}" id="${employee.id}">
${employee.employeeName}- ${employee.employeeCV}<
/option>
</c:forEach>
</select>
<textarea rows="3" cols="40" id="candidateBlurb"
name="candidateBlurb">BLURB</textarea>
<div id="employeeCv"></div>
<input type="submit" value="Add Candidate" />
</div>
</form:form>
一次仅获取一个员工详细信息。这是一个问题吗?创建一个包含列表作为属性的POJO类,例如
public class EmployeeForm {
private List<Candidate> candidates;
public List<Candidate> getCandidates() { ... }
public void setCandidates(List<Candidates>) { ... }
}
公共类员工表单{
私人名单候选人;
公共列表getCandidates(){…}
公众候选人(名单){…}
}
并在@RequestMapping方法的签名中使用它,而不是直接在列表中使用它
您得到的错误消息是Spring抱怨它不知道如何实例化List接口,以便Spring将表单中的请求参数绑定到它。如果希望提供一个简单的表单/命令类来绑定表单参数,Spring知道如何从中处理列表 您可以尝试以下方法:
List<Candidate> candidates = ListUtils.lazyList(new ArrayList<Candidate>(),FactoryUtils.instantiateFactory(Candidate.class));
List candidates=ListUtils.lazyList(new ArrayList(),FactoryUtils.instancefactory(Candidate.class));
我遇到了同样的问题,一半的字段绑定正确,另一半没有。我注意到未正确绑定的那一半(因此在控制器中为NULL)被包装在一个DIV中
当我将这些字段移出DIV时,宾果,它们在控制器中被正确绑定
我看到您也有一些字段被包装在一个DIV中,我建议将它们移出并查看它们是否对您的控制器可见。Hi,我按照您的建议进行了尝试,但我可能有些错误,因为您可以指导我吗?public class EmployeeForm{private static final Logger LOG=Logger.getLogger(EmployeeForm.class);private List candidates=new ArrayList();public List getCandidates(){return candidates;}public void setCandidates(List candidates){this.candidates=candidates;}}@RequestMapping(value=“{id}/empl”,method=RequestMethod.POST)公共字符串getEmployeeDetails(@modeldattribute(“candidateadattribute”)@Valid-EmployeeForm-candidates,BindingResult,@PathVariable(“id”)int-requestId,Model-Model){//code}当我调试上述代码时,当我尝试在控制器中使用它时,候选者为空。。。我应该更改代码中的某些内容吗?另外,当我尝试查看LOG.error(candidates.getCandidates().get(0.getCandidateBlurb())时;在我的控制器中,我在路径为[/panel requests]的上下文中得到Servlet[dispatcher]的错误-严重:Servlet.service()引发异常[请求处理失败;嵌套异常为java.lang.IndexOutOfBoundsException:Index:0,大小:0],根本原因为java.lang.IndexOutOfBoundsException:Index:0,大小:0请求中发送的表单数据是什么样子的?IIRC您应该有一个项目列表,如候选者[0]。姓名,候选者[0]。年龄,候选者[1]。姓名等
public class EmployeeForm {
private List<Candidate> candidates;
public List<Candidate> getCandidates() { ... }
public void setCandidates(List<Candidates>) { ... }
}
List<Candidate> candidates = ListUtils.lazyList(new ArrayList<Candidate>(),FactoryUtils.instantiateFactory(Candidate.class));