SpringMVC补充编码,日期,与Json等
1 action方法返回值类型
@Controller
@RequestMapping("/test")
public class Test {
/**
* action返回值类型 1: ModelAndView
* 设置request域属性+跳转资源的路径
**/
@RequestMapping("/m1.action")
public ModelAndView method_1() {
ModelAndView mv = new ModelAndView();
mv.addObject("a", "method_1");
mv.setViewName("jsp/test");
return mv;
}
/**
* action返回值类型 2: String
* 跳转的资源的路径->等价于mv.setViewName("test");
**/
@RequestMapping("/m2.action")
public String method_2(Model m) {
m.addAttribute("a", "method_2");
return "jsp/test";
}
/**
* action返回值类型 2: String
* 跳转的资源的路径->等价于mv.setViewName("test");
**/
@RequestMapping("/m3.action")
public String method_3(Model m) {
m.addAttribute("a", "method_3");
return "forward:/jsp/test.jsp";
}
/**
* action返回值类型 3: void
* 不需要指定跳转资源的路径(自己拼凑页面+ajax)
**/
@RequestMapping("/m4.action")
public void method_4(HttpServletResponse resp) throws Exception {
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
resp.getWriter().print("<a href='/springMVC/jsp/test.jsp'>跳转到jsp/test.jsp<a>");
return;
}
/**
* action返回值类型 3: void
* 不需要指定跳转资源的路径(自己拼凑页面+ajax)
**/
@RequestMapping("/m5.action")
public void method0_5(HttpServletResponse resp) throws Exception {
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
resp.getWriter().print("当前时间毫秒值:" + new Date().getTime());
return;
}
}
- test.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="<c:url value='/js/jquery-1.6.4.min.js'/>"></script>
<title>Insert title here</title>
<style type="text/css">
table {
border: 1px solid blue;
width: 600px;
margin: 100px auto;
border-collapse: collapse;
}
th, td {
border: 1px solid blue;
padding: 10px;
}
#div1 {
border: 1px solid blue;
width: 200px;
height: 200px;
}
</style>
</head>
<body>
<c:if test="${not empty requestScope.a}">
域属性a的值为:${requestScope.a}<br />
</c:if>
<a href="<c:url value='/test/m1.action'/>">请求m1.action:返回值是ModelAndView</a> <br />
<a href="<c:url value='/test/m2.action'/>">请求m2.action:返回值是String</a> <br />
<a href="<c:url value='/test/m3.action'/>">请求m3.action:返回值是String</a> <br />
<a href="<c:url value='/test/m4.action'/>">请求m4.action:返回值是void</a> <br />
<a href="javascript:testAjax();">请求m5.action:返回值是void</a> <br />
<div id="div1"></div>
<script type="text/javascript">
function testAjax() {
$.get("<c:url value='/test/m5.action'/>", "n=" + Math.random(),
function(data) {
$("#div1").html(data.fontcolor("red").bold());
}, "text");
}
</script>
</body>
</html>
2 全站编码
@Controller
@RequestMapping("/test")
public class Test {
/**
* 不设置编码集乱码 req.setCharacterEncoding("utf-8");
* 无效:方法参数name接受请求参数 在设置编码集之前
**/
@RequestMapping("/m1.action")
public ModelAndView method_1(HttpServletRequest req, String name) throws Exception {
req.setCharacterEncoding("utf-8");
name = req.getParameter("name");
String age = req.getParameter("age");
ModelAndView mv = new ModelAndView();
mv.addObject("a", "a_value_m1" + name + "、" + age);
mv.setViewName("jsp/test");
return mv;
}
/**
* 通过全站编码过滤器,解决乱码问题
* **/
@RequestMapping("/m2.action")
public ModelAndView method_2(String name, int age) throws Exception {
ModelAndView mv = new ModelAndView();
mv.addObject("a", "a_value_m2" + name + "、" + age);
mv.setViewName("jsp/test");
return mv;
}
}
- 在Xml添加全站编码的过滤器 解决乱码问题
<!-- 配置springmvc的全站编码集过滤器 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!-- 通过过滤器的初始化参数指定编码集 -->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.action</url-pattern>
<dispatcher>ERROR</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
- test.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="<c:url value='/js/jquery-1.6.4.min.js'/>"></script>
<title>Insert title here</title>
</head>
<body>
<c:if test="${not empty requestScope.a}">
域属性a的值为:${requestScope.a}<br />
</c:if>
<a href="<c:url value='/test/m1.action?name=韩雪&age=28'/>">get请求m1.action</a> <br />
<form action="<c:url value='/test/m1.action'/>" method="post">
name:<input type="text" name="name" />
age:<input type="text" name="age" /> <input type="submit" value="post请求" />
</form>
<br />
<a href="<c:url value='/test/m2.action?name=韩雪&age=25'/>">get请求m2.action</a> <br />
<form action="<c:url value='/test/m2.action'/>" method="post">
name:<input type="text" name="name" />
age:<input type="text" name="age" /> <input type="submit" value="post请求" />
</form>
</body>
</html>
3 mvc标签引入适配器和映射器
3.1 核心配置文件
*** 在核心配置文件中引入mvc的ns和xsd文件 ***
<beans
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
3.2 核心配置文件
*** 通过mvc标签自动注册注解形式的处理器映射器和处理器适配器 ***
<mvc:annotation-driven conversion-service="myDateConverBean"/>
4 参数是日期类型
4.0 字符串不正确,用Date接收:响应状态码400
/**
* 参数是日期类型
* 参数值是:2021-11-11 11:11:11->接收失败
* 响应状态码400:请求参数类型错误
* **/
@RequestMapping("/m1.action")
public ModelAndView method_1(Date date) {
ModelAndView mv = new ModelAndView();
mv.addObject("a", "a_value_1->" + date.toLocaleString());
mv.setViewName("jsp/test");
return mv;
}
4.1 参数字符串格式为yyyy/MM/dd HH:mm:ss
/**
* 参数是日期类型
* 参数值是:2021/12/12 12:12:12->接收成功
* 参数值是:2021-12-12 12:12:12->接收失败
* 方案1:需要客户端提交的字符串格式:yyyy/MM/dd HH:mm:ss
* **/
@RequestMapping("/m2.action")
public ModelAndView method_2(Date date) {
ModelAndView mv = new ModelAndView();
mv.addObject("a", "a_value_2->" + date.toLocaleString());
mv.setViewName("jsp/test");
return mv;
}
4.2 参数字符串接收用simpledateformat解析
/**
* 参数是日期类型
* 参数值是:2021-13-13 13:13:13->接收成功
* 方案2:使用字符串接收然后通过SimpleDateFormat对字符串解析为日期
* **/
@RequestMapping("/m3.action")
public ModelAndView method_3(String dateStr) throws Exception {
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(dateStr);
ModelAndView mv = new ModelAndView();
mv.addObject("a", "a_value_3->" + date.toLocaleString());
mv.setViewName("jsp/test");
return mv;
}
4.3 action参数使用注解:@DateTimeFormat
/**
* 参数是日期类型
* 参数值是:2021-14-14 14:14:14->接收失败
* 方案3:使用@DateTimeFormat 适用于spring版本4.3+
* **/
@RequestMapping("/m4.action")
public ModelAndView method_4(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date date)
throws Exception {
ModelAndView mv = new ModelAndView();
mv.addObject("a", "a_value_4->" + date.toLocaleString());
mv.setViewName("jsp/test");
return mv;
}
4.4 用注解@InitBinder设置自定义参数解析器
/**
* 参数是日期类型
* 参数值是:2021-15-15 15:15:15->接收成功
* 方案4: 使用@InitBinder来自定义date参数解析器
* 注意: 一旦使用@InitBinder默认格式 yyyy/MM/dd HH:mm:ss 将没法使用
* **/
@RequestMapping("/m5.action")
public ModelAndView method_5(Date date) throws Exception {
ModelAndView mv = new ModelAndView();
mv.addObject("a", "a_value_5->" + date.toLocaleString());
mv.setViewName("jsp/test");
return mv;
}
/**
* 作用范围是当前整个页面
* 并且其他日期格式都将失效
* **/
@InitBinder
public void setDateBinder(HttpServletRequest req, ServletRequestDataBinder binder) throws Exception {
req.setCharacterEncoding("UTF-8");
CustomDateEditor cde = new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"), false);
binder.registerCustomEditor(java.util.Date.class, cde);
}
4.5 使用统一的自定义解析器
- 创建一个解析器类实现接口Converter<String, Date>
public class MyDateConver implements Converter<String, Date> {
@Override
public Date convert(String arg0) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
return sdf.parse(arg0);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
}
- 在核心配置文件中配置此解析器
<!-- 配置日期的自定义转换器bean -->
<bean id="myDateConverBean"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="action.MyDateConver" />
</set>
</property>
</bean>
- 客户端参数字符串格式必须与解析器中模式一致
/**
* 参数是日期类型
* 参数值是:2021-16-16 16:16:16->接收成功
* 方案5: 设置统一的日期参数解析器bean
* 指定日期固定格式:yyyy-MM-dd HH:mm:ss
* **/
@RequestMapping("/m6.action")
public ModelAndView method_6(Date date) throws Exception {
ModelAndView mv = new ModelAndView();
mv.addObject("a", "a_value_6->" + date.toLocaleString());
mv.setViewName("jsp/test");
return mv;
}
- test.jap
<body>
<c:if test="${not empty requestScope.a}">
域属性a的值为:${requestScope.a}<br />
</c:if>
<a href="<c:url value='/test/m1.action?date=2021-11-11 11:11:11'/>">2021-11-11 11:11:11</a><br/>
<a href="<c:url value='/test/m1.action?date=2021-11-11'/>">2021-11-11</a><br/>
<a href="<c:url value='/test/m2.action?date=2021/12/12'/>">2021/12/12</a><br/>
<a href="<c:url value='/test/m2.action?date=2021/12/12 12:12:12'/>">2021/12/12 12:12:12</a><br/>
<a href="<c:url value='/test/m3.action?dateStr=2021-13-13 13:13:13'/>">参数是字符串</a><br/>
<a href="<c:url value='/test/m4.action?date=2021-14-14 14:14:14'/>">使用注解@DateTimeFormat</a><br/>
<a href="<c:url value='/test/m5.action?date=2021-15-15 15:15:15'/>">使用自定义日期参数解析器</a><br/>
<a href="<c:url value='/test/m6.action?date=2021-16-16 16:16:16'/>">统一的日期参数解析器bean</a><br/>
</body>
5 url模板映射
- 把参数伪装成url的一部分
public class Test {
@RequestMapping("/m1/{name}/{age}.action")
public ModelAndView method_1(@PathVariable("name") String sname, @PathVariable("age") int sage, boolean dy) {
ModelAndView mv = new ModelAndView();
mv.addObject("a", "a_value_1->" + sname + ":" + sage + ":" + dy);
mv.setViewName("jsp/test");
return mv;
}
}
- test.jsp
<body>
<c:if test="${not empty requestScope.a}">
域属性a的值为:${requestScope.a}<br />
</c:if>
<a href="<c:url value='/test/m1/韩雪/28.action?dy=true'/>">test/m1/韩雪/28</a> <br />
<a href="<c:url value='/test/m1/寒冰/22.action?dy=true'/>">test/m1/寒冰/22</a> <br />
</body>
6 传递的是json
- json概念
js可以直接解析一种数据格式:{属性名=属性值,属性名=属性值}
<a href="javascript:test();">json概念</a> <br />
<script type="text/javascript">
function test() {
var json = {
"name" : "韩雪",
"age" : 28,
"score" : 66.6,
"dy" : true,
"arr" : [ 1, 3, 5, 6, 7 ],
"teacher" : {
"tname" : "张雪崩",
"tsex" : "男"
}
};
alert(json);//[object Object]
alert(json.name+":"+json.age+":"+json.teacher.tname);//韩雪:28:张雪崩
}
</script>
6.1 响应数据是json
- test.jsp
<body>
<a href="javascript:test();">响应数据是json</a> <br />
<script type="text/javascript">
function test() {
$.ajax({
async:true, /*是否异步*/
cache:false, /*是否使用缓存*/
data:null, /*请求参数*/
dateType:"json", /*响应的数据类型*/
type:"GET", /*请求方式*/
url:"<c:url value='/test/m1.action'/>",
success:function(data){
alert(data+":"+data.name+":"+data.teacher.tname);
}
});
}
</script>
</body>
- action:添加@ResponseBody注解
@Component
@Controller
@RequestMapping("/test")
public class Test {
/**
* 响应的是json,java不识别json,只能响应json格式的字符串
* @Component:组件
* @Controller:控制器
* @ResponseBody:
* 1: 返回值如果是对象->返回的是对象对应的json串
* 2: 返回值是字符串->返回的是字符串数据(不是路径)
* **/
@RequestMapping("/m1.action")
@ResponseBody
public Student method_1() {
// 响应一个student对象对应的json串
Student s = new Student(18, "韩雪", true, "女", 99f, new Teacher(1001, "张雪崩", "男"));
return s;
}
}
6.2 请求参数是json字符串
-
jsp必须是post请求
-
必须设置ContextType=text/json;charset=utf-8
-
请求参数是json字符串,不是json对象
-
test.jsp
<body>
<a href="javascript:test_1();">参数是json字符串</a> <br />
<script type="text/javascript">
function test_1() {
var jsonStr='{"name":"韩雪","age":28,"dy":true,"sex":"女","score":99,
"teacher":{"tname":"张雪崩","tsex":"男"}}'
$.ajax({
async:true, /*是否异步*/
cache:false, /*是否使用缓存*/
data:jsonStr, /*请求参数是json格式的字符串*/
dateType:"text", /*响应的数据类型*/
/*请求参数是json,必须加请求头contentType,指定请求参数的类型*/
contentType:"application/json;charset=utf-8",
type:"POST", /*请求参数是json:请求方式必须是post*/
url:"<c:url value='/test/m1.action'/>",
success:function(data){
alert(data);
}
});
}
</script>
</body>
- action
@Component
@Controller
@RequestMapping("/test")
public class Test {
/**
* 请求参数的是json格式的字符串
* @RequestBod:用参数引用接受请求的json格式字符串的数据
* **/
@RequestMapping("/m1.action")
public void method_1(@RequestBody Student s, HttpServletResponse resp) throws Exception {
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
resp.getWriter().print(s.toString());
System.out.println(s);
return;
}
}
- test.jsp
<body>
<a href="javascript:test_1();">请求数据是json</a> <br />
<script type="text/javascript">
function test_1() {
var jsonStr='{"name":"韩雪","age":28,"dy":true,"sex":"女","score":99,
"teacher":{"tname":"张雪崩","tsex":"男"}}'
$.ajax({
async:true, /*是否异步*/
cache:false, /*是否使用缓存*/
data:jsonStr, /*请求参数是json格式的字符串*/
dateType:"test", /*响应的数据类型*/
/*请求参数是json,必须加请求头contentType,指定请求参数的类型*/
contentType:"application/json;charset=utf-8",
type:"POST", /*请求参数是json:请求方式必须是post*/
url:"<c:url value='/test/m1.action'/>",
success:function(data){
alert(data);
}
});
}
</script>
</body>
- action: 通过@RequestBody注解用对象引用来接受json串
@Component
@Controller
@RequestMapping("/test")
public class Test {
/**
* 请求的参数是json格式的字符串
* produces="text/plain; charset=UTF-8":
* 防止响应的字符串是乱码
* @RequestBod:
* 用参数引用接受请求的json格式字符串的数据
* 1: 返回值如果是对象->返回的是对象对应的json对象
* 2: 返回值是字符串->返回的是字符串数据(不是路径)
* **/
@RequestMapping(value = "/m1.action", produces = "text/plain; charset=UTF-8")
@ResponseBody
public String method_2(@RequestBody Student s, HttpServletResponse resp) throws Exception {
s.setName("叶晨");
s.setSex("魔");
s.setScore(999f);
return s.toString();
}
}
6.3 请求json串、响应json串
- test.jsp
<body>
<a href="javascript:test_1();">请求数据是json、响应数据是json</a> <br />
<script type="text/javascript">
function test_1() {
var jsonStr='{"name":"韩雪","age":28,"dy":true,"sex":"女","score":99,
"teacher":{"tname":"张雪崩","tsex":"男"}}'
$.ajax({
async:true, /*是否异步*/
cache:false, /*是否使用缓存*/
data:jsonStr, /*请求参数是json格式的字符串*/
dateType:"json", /*响应的数据类型*/
/*请求参数是json,必须加请求头contentType,指定请求参数的类型*/
contentType:"application/json;charset=utf-8",
type:"POST", /*请求参数是json:请求方式必须是post*/
url:"<c:url value='/test/m1.action'/>",
success:function(data){
alert(data+":"+data.name+":"+data.score);
}
});
}
</script>
</body>
- action:@RequestBody+@ResponseBody
@Component
@Controller
@RequestMapping("/test")
public class Test {
/**
* 请求的参数是json格式的字符串
* @RequestBod:
* 用参数引用接受请求的json格式字符串的数据
* 1: 返回值如果是对象->返回的是对象对应的json串
* 2: 返回值是字符串->返回的是字符串数据(不是路径)
* **/
@RequestMapping(value = "/m1.action")
@ResponseBody
public Student method_2(@RequestBody Student s) throws Exception {
s.setName("叶晨");
s.setSex("魔");
s.setScore(999f);
return s;
}
}
6.4 注意
@ResponseBody,响应的是对象,中文不乱码,响应的是字符串中文乱码
需要在@RequestMapping中加属性produces
- jsp:请求是json串,响应是字符串
<body>
<a href="javascript:test_1();">请求数据是json</a> <br />
<script type="text/javascript">
function test_1() {
var jsonStr='{"name":"韩雪","age":28,"dy":true,"sex":"女","score":99,
"teacher":{"tname":"张雪崩","tsex":"男"}}'
$.ajax({
async:true, /*是否异步*/
cache:false, /*是否使用缓存*/
data:jsonStr, /*请求参数是json格式的字符串*/
dateType:"test", /*响应的数据类型*/
/*请求参数是json,必须加请求头contentType,指定请求参数的类型*/
contentType:"application/json;charset=utf-8",
type:"POST", /*请求参数是json:请求方式必须是post*/
url:"<c:url value='/test/m1.action'/>",
success:function(data){
alert(data);
}
});
}
</script>
</body>
- action: /test/m1.action
@Component
@Controller
@RequestMapping("/test")
public class Test {
/**
* 请求的参数是json格式的字符串
* produces="text/plain; charset=UTF-8":
* 防止响应的字符串是乱码
* @RequestBod:
* 用参数引用接受请求的json格式字符串的数据
* 1: 返回值如果是对象->返回的是对象对应的json串
* 2: 返回值是字符串->返回的是字符串数据(不是路径)
* **/
@RequestMapping(value = "/m1.action", produces = "text/plain; charset=UTF-8")
@ResponseBody
public String method_2(@RequestBody Student s, HttpServletResponse resp) throws Exception {
s.setName("叶晨");
s.setSex("魔");
s.setScore(999f);
return s.toString();
}
}
7 数据回显
为了提高客户的体验性,当数据提交失败时,跳转到原来的页面,表单保留原值
7.1 单值参数
-
需要手动把方法参数装入request域中
-
jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript"
src="<c:url value='/js/jquery-1.6.4.min.js'/>"></script>
<title>Insert title here</title>
<style type="text/css">
table {
border: 1px solid blue;
width: 600px;
margin: 10px auto;
border-collapse: collapse;
}
th, td {
border: 1px solid blue;
padding: 10px;
}
</style>
</head>
<body>
<c:if test="${not empty message }">
错误提示信息:${message}<br />
</c:if>
<form action="<c:url value='/test/m1.action'/>" method="post" id="form1">
<table>
<tr>
<th>学生名字:</th>
<td><input type="text" name="name" value="${requestScope.name}" /></td>
</tr>
<tr>
<th>学生密码:</th>
<td><input type="text" name="pwd" value="${requestScope.pwd}" /></td>
</tr>
<tr>
<th>学生年龄:</th>
<td><input type="text" name="age" value="${requestScope.age}" /></td>
</tr>
<tr>
<th>学生性别:</th>
<td>
男:<input type="radio" name="sex" value="男" />
|
女:<input type="radio" name="sex" value="女" />
</td>
</tr>
<tr>
<th colspan="2"><input type="submit" value="注册" /></th>
</tr>
</table>
</form>
<script type="text/javascript">
$(function() {
var requestSex = "${requestScope.sex}";
$.each($("#form1 input[name='sex']"), function(i, n) {
if ($(n).val() == requestSex) {
$(n).attr("checked", "checked");
}
})
});
</script>
</body>
</html>
- action
@Component
@Controller
@RequestMapping("/test")
public class Test {
/**
* 数据回显1: 单值数据
* 需要把数据添加到request域中
* **/
@RequestMapping("/m1.action")
public String method01(int age, String name, String sex, String pwd, Model model) {
model.addAttribute("message", "服务器繁忙,请稍等!name=" + name + ",age=" + age + ",sex=" + sex);
model.addAttribute("name", name);
model.addAttribute("sex", sex);
model.addAttribute("pwd", pwd);
model.addAttribute("age", age);
return "jsp/test";
}
}
7.2 对象类型参数
-
springmvc自动把参数作为属性值,类名首字母作为属性名存储到request域中
-
jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript"
src="<c:url value='/js/jquery-1.6.4.min.js'/>"></script>
<title>Insert title here</title>
<style type="text/css">
table {
border: 1px solid blue;
width: 600px;
margin: 10px auto;
border-collapse: collapse;
}
th, td {
border: 1px solid blue;
padding: 10px;
}
</style>
</head>
<body>
<c:if test="${not empty message }">
错误提示信息:${message}<br />
</c:if>
学生->${requestScope.stu}<br/>
<form action="<c:url value='/test/m1.action'/>" method="post"
id="form_1">
<table>
<tr>
<th>学生名字:</th>
<td><input type="text" name="name" value="${requestScope.stu.name}" /></td>
</tr>
<tr>
<th>学生密码:</th>
<td><input type="text" name="pwd" value="${requestScope.stu.pwd}" /></td>
</tr>
<tr>
<th>学生年龄:</th>
<td><input type="text" name="age" value="${requestScope.stu.age}" /></td>
</tr>
<tr>
<th>学生性别:</th>
<td>
男:<input type="radio" name="sex" value="男" />
|
女:<input type="radio" name="sex" value="女" />
</td>
</tr>
<tr>
<th colspan="2"><input type="submit" value="注册" /></th>
</tr>
</table>
</form>
<script type="text/javascript">
$(function() {
var requestSex = "${requestScope.stu.sex}";
$.each($("#form_1 input[name='sex']"), function(i, n) {
if ($(n).val() == requestSex) {
$(n).attr("checked", "checked");
}
})
});
</script>
</body>
</html>
- action:可以通过@ModelAttribute注解来指定域属性名
@Component
@Controller
@RequestMapping("/test")
public class Test {
/**
* 数据回显2: 对象类型的数据
* springmvc会自动把对象装入request域中,但是属性名为类名首字母小写
* @ModelAttribute("stu")Student stu->此注解作用指定域属性名为stu
**/
@RequestMapping("/m1.action")
public String method(@ModelAttribute("stu") Student stu, Model model) {
model.addAttribute("message","服务器繁忙,请稍等! stu=" + stu);
return "jsp/test";
}
}