Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用@modeldattribute从JSP表单将列表绑定到控制器_Java_Jsp_Spring Mvc - Fatal编程技术网

Java 如何使用@modeldattribute从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

我正在尝试使用@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-

<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));