解决POST提交乱码
Spring MVC已经提供了相应的过滤器,我们只需要配置一下就可以了。
<filter>
<filter-name>encoding</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>
</filter>
简单类型的绑定
Integer、String、Float、Double、Boolean、Character、Byte、Long、Short。
http://localhost:8080/xxx.action?id=2&status=false
public String editItem(Model model,Integer id,Boolean status)
pojo类型的绑定
pojo对象中的属性名和表单中input的name属性一致就可以绑定。
包装后的pojo类型
public class QueryVo {
private Item item;
set/get。。。
}
自定义参数绑定
比如我们后台需要一个Date数据,但是前端传过来的却是一个String,这样Spring MVC就不能帮我们自动封装了,我们需要配置转换器。请求最先到达的是前端适配器,但是它会把请求交给处理器映射器,不过处理器映射器只是会返回应该被执行的拦截器和处理器。真正对请求就行解析的是处理器适配器。所以配置转换器是需要给他配置到处理器适配器中。
<!-- 配置处理器映射器、处理器适配器,配置转换器 -->
<mvc:annotation-driven conversion-service="conversionService" />
<!-- 转换器配置 -->
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="cn.itcast.springmvc.converter.DateConverter" />
</list>
</property>
</bean>
//Converter<S, T>
//S:source,需要转换的源的类型
//T:target,需要转换的目标类型
public class DateConverter implements Converter<String, Date> {
public Date convert(String source) {
try {
// 把字符串转换为日期类型
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
Date date = simpleDateFormat.parse(source);
return date;
} catch (ParseException e) {
e.printStackTrace();
}
// 如果转换异常则返回空
return null;
}
}
绑定数组
Spring MVC会把名字一样的看做数组中不同的元素,所以绑定数组为参数时,把表单里的名称设为相同即可。
<form action="deletestu.action" method="post">
<input type="submit" value="批量删除"/>
<table width="100%" border=1>
<tr>
<td>选择</td>
<td>姓名 </td>
<td>年龄</td>
<td>出生日期</td>
<td>操作</td>
</tr>
<c:forEach items="${list}" var="stu">
<tr>
<td><input type="checkbox" name="deleteid" value="${stu.id }"/></td>
<td>${stu.name } </td>
<td>${stu.age } </td>
<td><fmt:formatDate value="${stu.birthday }" pattern="yyyy-MM-dd"/> </td>
<td><a href="editstudent/${stu.id}.action">修改</a></td>
</tr>
</c:forEach>
</table>
</form>
public String deleteStu(String [] deleteid){ }
绑定List集合
绑定多个pojo时,一般使用List集合,但是需要指定索引。
public class StudentScore {
private String coursename;
private Float score;
public String getCoursename() {
return coursename;
}
public void setCoursename(String coursename) {
this.coursename = coursename;
}
public Float getScore() {
return score;
}
public void setScore(Float score) {
this.score = score;
}
}
public class UserVo {
private List<StudentScore> scores;
public List<StudentScore> getScores() {
return scores;
}
public void setScores(List<StudentScore> scores) {
this.scores = scores;
}
}
<form action="${pageContext.request.contextPath}/stu/saveStudentList.action" method="post">
课程名:<input type="text"name="scores[0].coursename"/>成绩:<input type="text"name="scores[0].score"/><br/>
课程名:<input type="text"name="scores[1].coursename"/>成绩:<input type="text"name="scores[1].score"/><br/>
课程名:<input type="text"name="scores[2].coursename"/>成绩:<input type="text"name="scores[2].score"/><br/>
<input type="submit" value="提交 "/>
</form>
部分案例代码来至:https://blog.youkuaiyun.com/zhoukun1008/article/details/62218469。