我正在尝试使用@modelAttribute与其各自的id和blurb获得选定的候选人到我的控制器的列表。我能够正确地带来一个候选人,但我不知道如何通过候选人名单…我试图添加List<>如下所示,但我得到
——错误严重:servlet .service()为servlet [dispatcher]在上下文路径[/panel-requests]抛出异常[请求处理失败;嵌套异常是org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [java.util.]List]:指定的类是一个具有根本原因的接口org.springframework.beans.BeanInstantiationException:无法实例化bean类。:指定的类是一个接口
JSP -
<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>
上面的表单首先显示员工列表,当用户选择员工,输入简介并点击添加候选按钮时,它将数据传递给控制器。
控制器:
@RequestMapping(value = "{id}/empl", method = RequestMethod.POST)
public String getEmployeeDetails(
@ModelAttribute("candidateAddAttribute") @Valid List<Candidate> candidates,
BindingResult result, @PathVariable("id") int requestId, Model model) {
//implementation goes here
}
在这种情况下我如何实现列表?提前谢谢。
<<p> 编辑部分/strong>我试着发送2个候选人的详细信息,firebug发送它正确像-参数候选人简介候选人的简介雇员1员工2所以它可能是initBinder中的一个问题,binder.registerCustomEditor (Employee.classnew PropertyEditorSupport() {公共字符串getAsText() {return Long.toString(((Employee) getValue()).getId());}
public void setAsText(final String text) {
Employee employee = Employee.findById(Integer
.parseInt(text));
setValue(employee);
}
});
一次只获取一个员工的详细信息。这有问题吗?
创建一个包含List作为属性的POJO类,例如
public class EmployeeForm {
private List<Candidate> candidates;
public List<Candidate> getCandidates() { ... }
public void setCandidates(List<Candidates>) { ... }
}
并在@RequestMapping方法的签名中使用它,而不是直接使用List<Candidate>
。
您得到的错误消息是Spring抱怨它不知道如何实例化List接口,以便Spring将表单中的请求参数绑定到它。您希望提供一个简单的表单/命令类来将表单参数绑定到其中,Spring知道如何从那里处理列表。
你可以试试:
List<Candidate> candidates = ListUtils.lazyList(new ArrayList<Candidate>(),FactoryUtils.instantiateFactory(Candidate.class));
我遇到过同样的问题,一半的字段绑定正确,一半没有。我注意到没有正确绑定的一半(因此在控制器中给我NULL)被包装在DIV中。
当我将这些字段移出DIV时,它们在控制器中被正确地绑定了。
我看到你也有一些字段包装在DIV中,我建议将它们移出,看看它们是否对你的控制器可见。