当前位置: 首页 > 知识库问答 >
问题:

在MVC中,数据是如何从JSP传递到控制器的?

李弘光
2023-03-14

我在这里遵循Spring MVC教程:http://www.tutorialspoint.com/spring/spring_mvc_form_handling_example.htm我也不明白数据是如何从JSP传递到控制器的。

我想我理解数据是如何从控制器传递到JSP的,但是在用户在JSP上编辑表单之后,数据是如何传递到控制器的呢?

在控制器中:公共字符串addStudent(@ModelAttribute(“SpringWeb”)学生学生,模型图模型)

    < li >问:控制器如何从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());
...

< code > list of students . size()返回0。

共有3个答案

蒲寂离
2023-03-14

控制器和jsp通过@Model属性链接在一起。例如,如果我想添加一个新学生,我会首先将相应的jsp页面与学生数据库链接起来。喜欢

//setup add new student form
@RequestMapping(value = "/add", method = RequestMethod.GET)
public String setStudentForm(@ModelAttribute("newStudent") Student newStudent){
    return "addstudent";
}

这将设置我的jsp页面。在jsp页面中,我已经声明了像firstname,lastname这样的列,它们与我的学生模型相链接。

<form:form  modelAttribute="newStudent" class="form-horizontal">
    <form:input id="firstName" path="firstName" type="text"/>
    <form:input id="lastName" path="lastName" type="text"/>
    <input type="submit" id="btnAdd" value ="add"/>
</form>

就像这样我创造了凌。现在,当我按下提交按钮,如果将土地后的请求,因此以下方法在控制器将被执行。

@RequestMapping(value = "/add", method = RequestMethod.POST)
public String processStudentForm(Model model, @ModelAttribute("newStudent") @Valid Student newStudent, BindingResult result ){      

    newStudent.setFirstName("gurpreet");
    if(result.hasErrors()){
        return "addstudent";
    }                   
    studentService.add(newStudent);
    model.addAttribute("message", "Added successfully");
    return "redirect:/students";
}

I can also make changes in the data like i did  newStudent.setFirstName("gurpreet"); before saving the object through studentService

@RequestMapping url是相同的,但方法已从“作为提交”按钮的“获取”更改为“提交”。

(@ModelAttribute("newStudent") Student newStudent)
associates our view, Model and controller alltogether.
万俟旭
2023-03-14

通常“工作”是在控制器中完成的,结果被传递给JSP只是为了显示。JSP通过HTTP呈现给用户的浏览器,然后用户修改页面并回发到控制器。如果您在JSP中做的“工作”需要在页面发送给用户之前传递回控制器,那么您应该考虑找到一种在控制器中完成所有这些工作的方法。

话虽如此。传递给 JSP 的模型不必包含简单对象。您可以向 JSP 传递一个对象,该对象上具有执行处理的方法。然后在 JSP 中,您只需调用该对象上的方法之一。

颜畅
2023-03-14

问题:控制器如何从jsp学生类实例上的表单中知道带有姓名、年龄和id的学生被传递?

当您提交表单时,您正在向给定的URL发出HTTP(通常是POST)请求。这个POST请求将包含表单中的值作为请求参数。如果您没有使用任何web框架(例如Spring MVC),那么您通常会直接使用Servlet API来提取和处理这些值,尤其是< code>HttpServletRequest对象。

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

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

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

}

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

至于你问题的第二部分,有许多关于如何绑定到集合的例子。例如,请参见下面:

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

 类似资料:
  • 假设我在jsp中有这个表单 和Person类 编辑:控制器实现 我没有问题调用其他方法,但测试。

  • 我正在尝试获取一个将列表从 JSP 传递到控制器的示例以工作: http://viral Patel . net/blogs/spring-MVC-multi-row-submit-Java-list/ 这个例子的问题是我没有让JSP/WEB content/we b-INF/JSP/add _ contact . JSP工作。他有一句台词: 我得到varstatus变量的错误。他从哪里得到这个变

  • 问题内容: 我正在使用剃刀,并且很难将数组传递给控制器​​。数组包含我制作的对象,而我正在尝试这样做: 而我的控制器是: 我不需要使用ajax,但是我不确定该怎么做。在控制器中,它表明“ operationCollection”包含元素,但它们都为空。 问题答案: 客户端: 并声明一个类服务器端,如下所示: 那么您可以执行以下操作:

  • 我是spring的新手,在spring3中创建了一个应用程序。0我正在使用注释spring。 我想从我的控制器方法返回列表到jsp。列表将显示在选择框中。以下是控制器和jsp部分的代码。请帮助我理解这一点。 和JSP 在模型中添加用户时,它工作正常,但是当我添加lookingfor属性时。model.add属性(“lookingfor”,lookingfor); 这是一个错误。 严重:Servle

  • 我的控制器代码: 但不管用。

  • 我试图将数据传递给controller进行进一步处理,但在controller中得到null,然而js(ajax)的debug无论如何都会显示这个数字。可能是什么问题? Ajax: 控制器: