我在这里遵循Spring MVC教程:http://www.tutorialspoint.com/spring/spring_mvc_form_handling_example.htm我也不明白数据是如何从JSP传递到控制器的。
我想我理解数据是如何从控制器传递到JSP的,但是在用户在JSP上编辑表单之后,数据是如何传递到控制器的呢?
在控制器中:公共字符串addStudent(@ModelAttribute(“SpringWeb”)学生学生,模型图模型)
我有这个例子。我修改了示例以显示学生列表,但我无法从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。
控制器和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.
通常“工作”是在控制器中完成的,结果被传递给JSP只是为了显示。JSP通过HTTP呈现给用户的浏览器,然后用户修改页面并回发到控制器。如果您在JSP中做的“工作”需要在页面发送给用户之前传递回控制器,那么您应该考虑找到一种在控制器中完成所有这些工作的方法。
话虽如此。传递给 JSP 的模型不必包含简单对象。您可以向 JSP 传递一个对象,该对象上具有执行处理的方法。然后在 JSP 中,您只需调用该对象上的方法之一。
问题:控制器如何从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: 控制器: