java - 处理带有多个下拉菜单的 Spring MVC 表单的问题

标签 java spring jsp spring-mvc servlets

我有一个带有两个下拉菜单的表单,用于选择学生和学生将参加的类(class)。当我使用此表单加载页面时,我收到错误,我将在下面包含这些错误。

这是我的 jsp 表单。

分配学生.jsp

<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@include file="header.jsp"%>
<p>
<h2>Assign a Student to a Course</h2>
<br />
<form:form method="POST" action="/myApp/assignStudent">
<table>
    <tr>
        <th>Student</th>
        <th>Course</th>
    </tr>
    <tr>
        <td>
            <form:select path="studentMap" items="${studentMap}">
            </form:select>
        </td>
        <td>
            <form:select path="courseMap" items="${courseMap}">
            </form:select>
        </td>
    </tr>
    <tr>
        <td align="center" colspan="2"><input type="submit" value="Submit" /></td>
    </tr>
    <tr>
</table>
</form:form>
</p>
<%@include file="footer.jsp"%>

这是我一直在修改的 Controller 类的相关部分:

@RequestMapping(value = "/assignStudent", method = RequestMethod.GET)
public ModelAndView enrollInCourse()
{
    Map<Integer, String> studentMap = new HashMap<Integer, String>();

    //Create a map to put into the student dropdown menu
    for (Student s : studentDAO.allStudents())
    {
        String fullName = s.getFirstName() + " " + s.getLastName();

        studentMap.put(s.getStudentID(), fullName);
    }

    Map<Integer, String> courseMap = new HashMap<Integer, String>();

    //Create a map to put into the course dropdown menu
    for (Course c : courseDAO.allCourses())
    {           
        courseMap.put(c.getCourseID(), c.getCourseName());
    }

    ModelAndView model = new ModelAndView("assignStudent", "command", new StudentCourse());

    model.addObject("studentMap", studentMap);
    model.addObject("courseMap", courseMap);

    return model;
}

以下是我收到的错误消息:

HTTP Status 500 - An exception occurred processing JSP page /WEB-INF/jsp/assignStudent.jsp at line 14

type Exception report

message An exception occurred processing JSP page /WEB-INF/jsp/assignStudent.jsp at line 14

description The server encountered an internal error that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: An exception occurred processing JSP page /WEB-INF/jsp/assignStudent.jsp at line 14

 11:    </tr> 
 12:    <tr> 
 13:        <td> 
 14:            <form:select path="studentMap" items="${studentMap}"> 
 15:            </form:select> 
 16:        </td>
 17:        <td>

Stacktrace: org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340) javax.servlet.http.HttpServlet.service(HttpServlet.java:725) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:168) org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303) org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1228) org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1011) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:955) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857) javax.servlet.http.HttpServlet.service(HttpServlet.java:618) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842) javax.servlet.http.HttpServlet.service(HttpServlet.java:725) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) root cause

org.springframework.beans.NotReadablePropertyException: Invalid property 'studentMap' of bean class [com.myapp.StudentCourse]: Bean property 'studentMap' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter? org.springframework.beans.BeanWrapperImpl.getPropertyValue(BeanWrapperImpl.java:726) org.springframework.beans.BeanWrapperImpl.getPropertyValue(BeanWrapperImpl.java:717) org.springframework.validation.AbstractPropertyBindingResult.getActualFieldValue(AbstractPropertyBindingResult.java:99) org.springframework.validation.AbstractBindingResult.getFieldValue(AbstractBindingResult.java:229) org.springframework.web.servlet.support.BindStatus.(BindStatus.java:120) org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:168) org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:188) org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getName(AbstractDataBoundFormElementTag.java:154) org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.autogenerateId(AbstractDataBoundFormElementTag.java:141) org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.resolveId(AbstractDataBoundFormElementTag.java:132) org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.writeDefaultAttributes(AbstractDataBoundFormElementTag.java:116) org.springframework.web.servlet.tags.form.AbstractHtmlElementTag.writeDefaultAttributes(AbstractHtmlElementTag.java:422) org.springframework.web.servlet.tags.form.SelectTag.writeTagContent(SelectTag.java:194) org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.java:84) org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:80) org.apache.jsp.WEB_002dINF.jsp.assignStudent_jsp._jspx_meth_form_005fselect_005f0(assignStudent_jsp.java:267) org.apache.jsp.WEB_002dINF.jsp.assignStudent_jsp._jspx_meth_form_005fform_005f0(assignStudent_jsp.java:218) org.apache.jsp.WEB_002dINF.jsp.assignStudent_jsp._jspService(assignStudent_jsp.java:122) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:725) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340) javax.servlet.http.HttpServlet.service(HttpServlet.java:725) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:168) org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303) org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1228) org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1011) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:955) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857) javax.servlet.http.HttpServlet.service(HttpServlet.java:618) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842) javax.servlet.http.HttpServlet.service(HttpServlet.java:725) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

我对 Spring MVC 还很陌生,所以我很感谢你的建议!

最佳答案

您没有显示 StudentCourse 类,而是根据根异常

org.springframework.beans.NotReadablePropertyException: Invalid property 'studentMap' of bean class [com.myapp.StudentCourse]: Bean property 'studentMap' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter? 

您的 StudentCourse 类没有 studentMap 属性,或者缺少它的 setter,或者它的名称不是 setStudentMap,因此解决方案是添加一个 StudentMap 属性到您的类中,并按照正确的命名规则(setStudentMapgetStudentMap)编写 setter 和 getter。

但是,如果您不希望在 StudentCourse 类中拥有 StudentMap 属性,您可以使用 public ModelAndView(View view, java.util.Map model)构造函数并传递您的 StudentCourse、studentMap 和 courseMap 对象。

关于java - 处理带有多个下拉菜单的 Spring MVC 表单的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27339933/

相关文章:

用于将长 IPv6 地址转换为其压缩形式的 Java 库

java - Linux:使用 Java 读取 xwd 输出?

java - Spring - JdbcTemplate - 使用 CTE 和枚举行进行查询

java - 使用 Spring EL 分割字符串

javascript - 带有单选按钮的 Jquery 弹出窗口

java - RESTful Web 服务中的@POST

java - 如何让jar文件双击后执行

java - 国际化网络服务

java - 为什么使用jsp :useBean here but not just create a new object?

selenium - 使用 Python 从 JSP 网站抓取表