浏览器提交数据是非常常见的场景,本例演示用户提交产品名称和价格到Spring MVC Spring MVC如何接受数据
- pojo
实体类Product
package pojo; public class Product { private int id; private String name; private float price; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public float getPrice() { return price; } public void setPrice(float price) { this.price = price; } }
- addProduct.jsp
在web目录下 (不是在WEB-INF下)增加商品的页面addProduct.jsp
注意:产品名称input的name要使用name,而不是 product.name
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*" isELIgnored="false"%> <form action="addProduct"> 产品名称 :<input type="text" name="name" value=""><br /> 产品价格: <input type="text" name="price" value=""><br /> <input type="submit" value="增加商品"> </form>
- ProductController
控制器ProductController,准备一个add方法映射/addProduct路径
为add方法准备一个Product 参数,用于接收注入
最后跳转到showProduct页面显示用户提交的数据
注: 参数product会默认被当做值加入到ModelAndView 中,相当于:
mav.addObject("product",product);
package controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.ModelAndView; import pojo.Product; @Controller public class ProductController { @RequestMapping("/addProduct") public ModelAndView add(Product product) throws Exception { ModelAndView mav = new ModelAndView("showProduct"); return mav; } }
- showProduct.jsp
在WEB-INF/page 目录下创建 showProduct.jsp
用 EL 表达式显示用户提交的名称和价格
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false"%> 产品名称: ${product.name}<br> 产品价格: ${product.price}
- 测试
访问页面
提交数据,显示结果http://127.0.0.1:8080/springmvc/addProduct.jsp
- add()方法的【参数类型】会自动转小写并加入到 ModelAndView 中作为 addObject() 的【第一个参数】,相当于 addObject("theFirstParam", product);
综上:addObject 里第一个参数是根据 add() 的参数类型自动转成小写命名,第二个参数是 add() 的参数名。