gpt4 book ai didi

spring - 在MVC中,数据是如何从JSP传递到Controller的?

转载 作者:行者123 更新时间:2023-12-02 12:20:08 25 4
gpt4 key购买 nike

我在这里关注 Spring MVC 教程:http://www.tutorialspoint.com/spring/spring_mvc_form_handling_example.htm我不明白数据如何从 JSP 传递到 Controller 的逻辑。

我想我明白数据是如何从 Controller 传递到JSP的,但是用户在JSP上编辑表单后,数据是如何传递到 Controller 的?

在 Controller 中:public String addStudent(@ModelAttribute("SpringWeb")Student学生,ModelMap模型)

  1. 问题: Controller 如何知道从jsp上的表单Student类实例中传递了学生的姓名、年龄和id?

我有这个例子。我已更改示例以显示学生列表,但我无法将列表从 JSP 获取到 Controller :

@RequestMapping(value = "/student", method = RequestMethod.POST)
public ModelAndView studentSave(@ModelAttribute("listOfStudents") ArrayList<Student> listOfStudents,ModelMap model)
{
ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");

StudentJDBCTemplate studentJDBCTemplate = (StudentJDBCTemplate) context.getBean("studentJDBCTemplate");

System.out.println("Size of listOfStudents is = " + listOfStudents.size());
...

listOfStudents.size() 返回 0。

  • 问题:我在这里缺少什么,为什么我无法从 jsp 上的表单获取列表?
  • 最佳答案

    question: How the controller knows that from the form on the jsp Student class instance student with name, age and id are passed?

    当您提交表单时,您正在向给定 URL 发出 HTTP(通常是 POST)请求。此 POST 请求将包含以下值表单作为请求参数。如果您没有使用任何 Web 框架(例如 Spring MVC),那么您通常会直接使用 Servlet API提取并使用这些值,特别是 HttpServletRequest 对象。

    http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html

    您可以通过添加以下内容来尝试这是您的应用程序(Spring MVC 框架将自动传递请求)。

    public String addStudent(@ModelAttribute Student student, HttpServletRequest request){
    for(String key : request.getParameterMap().keySet()){
    System.out.println(key + "=" + request.getParameterMap().get(key);
    }
    }

    现在,无论您使用的框架是什么,底层机制都没有改变,参数仍然以简单的字符串形式在 POST 请求中发送。然而,该框架本质上在此基础上添加了一个抽象层,以防止您必须编写样板来提取并手动使用这些内容参数。因此,不必执行以下操作:

    public String addStudent(HttpServletRequest request){
    Student student = new Student();
    student.setId(Integer.parseInt(request.getParameter("id"));
    student.setName(request.getParameter("name"));
    ....

    }

    你让框架来处理它。

    public String addStudent(@ModelAttribute Student student){

    }

    @ModelAttribute 告诉框架您希望将提交的参数绑定(bind)到 Student 实例。提交后,框架将创建一个新的学生实例,并通过反射( http://docs.oracle.com/javase/tutorial/reflect/ )将各个字段设置为相应的 HTTP 参数。

    关于问题的第二部分,有很多关于如何绑定(bind)到集合的示例。请参阅下面的示例:

    http://viralpatel.net/blogs/spring-mvc-multi-row-submit-java-list/

    关于spring - 在MVC中,数据是如何从JSP传递到Controller的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28692339/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com