Spring MVC - 参数绑定(03)

解决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属性一致就可以绑定。
form
pojo

包装后的pojo类型

public class QueryVo {
	private Item item;
	set/get。。。
}

包装的pojo

自定义参数绑定

比如我们后台需要一个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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值