15.4 处理方法的数据绑定
来源:互联网 发布:js 严格模式 编辑:程序博客网 时间:2024/05/18 15:26
数据转换
1、自己写的转换类 StringToUserConverter.java
import org.springframework.core.convert.converter.Converter;// 将请求参数字符串直接转化为自己写的User对象,比如 userName:password:realName形式的字符串public class StringToUserConverter implements Converter<String, User>{ @Override public User convert(String source) { // TODO Auto-generated method stub User user = new User(); if(source != null){ String[] items = source.split(":"); user.setUserName(items[0]); user.setPassword(items[1]); user.setRealName(items[2]); } return user; }}
2、在Controller 类的配置文件baobaotao-servlet.xml中添加数据转换的bean
<!-- 装配自定义的ConversionService --> <mvc:annotation-driven conversion-service="conversionService"/> <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"> <property name="converters"> <list> <!-- 自己写的字符串转User类的转换器 --> <bean class="com.domain.StringToUserConverter"></bean> </list> </property> </bean>
3、UserController.java中某个方法
@RequestMapping(value="/handle81") public String handle81(@RequestParam("user") User user ,ModelMap modelMap){ modelMap.put("user", user); return "/user/showUser"; }
4、showUser.jsp
<head><title>用户信息</title></head><body> 当前用户是${user.userName} </body>
5、测试
在浏览器输入http://localhost:8080/easy_springmvc_test/user/handle81.html?user=tom:1234:tomason 验证结果
6、分析
浏览器地址中给了user信息,但是是字符串形式,在访问handle81方法时,由数据转换器自动把String转换成了User,从而传给了handle81的参数,再由modelMap把user信息传出来,jsp页面可以接收到。
数据格式化
spring3.0引入的格式化框架,位于org.springframework.format包中
例:
1、还是上面自己的StringToUserConverter.java
2、在Controller的配置文件 baobaotao-servlet.xml中加上:
<!-- 加上格式化bean:FormattingConversionServiceFactoryBean --> <mvc:annotation-driven conversion-service="conversionService"/> <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <property name="converters"> <list> <!-- 自己写的字符串转User类的转换器 --> <bean class="com.domain.StringToUserConverter"></bean> </list> </property> </bean>
3、实体类User.java中的注解驱动格式化
// 其中的两行@DateTimeFormat(pattern="yyyy-MM-dd")和@NumberFormat(pattern="#,###.##")就是注解驱动格式化 @XStreamAsAttribute @Past @DateTimeFormat(pattern="yyyy-MM-dd") private Date birthday; @XStreamAsAttribute @DecimalMin(value="1000.00") @DecimalMax(value="100000.00") @NumberFormat(pattern="#,###.##") private long salary;
4、UserController.java中加方法
@RequestMapping(value = "/handle82") public String handle82(User user) { return "/user/showUser"; }
5、测试UserControllerTest.java
@Test public void testhandle82() { RestTemplate restTemplate = new RestTemplate(); MultiValueMap<String, String> form = new LinkedMultiValueMap<String, String>(); form.add("userName", "tom"); form.add("password", "123456"); form.add("birthday", "1980-01-01"); form.add("salary", "4,500.00"); String html = restTemplate.postForObject( "http://localhost:8080/easy_springmvc_test/user/handle82.html",form,String.class); Assert.assertNotNull(html); System.out.println(html); }
6、结果及分析
测试里最终的html得到的是user/showUser.jsp的页面代码
测试方法里的数据form传递给了handle82方法的参数user
使用@InitBinder和WebBindingInitializer装配自定义编辑器
首先是com.domain/UserEditor.java
import java.beans.PropertyEditorSupport;// 自定义编辑器public class UserEditor extends PropertyEditorSupport { @Override public void setAsText(String text) throws IllegalArgumentException { User user = new User(); if (text != null) { String[] items = text.split(":"); user.setUserName(items[0]+"by propertyeEditor"); user.setPassword(items[1]); user.setRealName(items[2]); } setValue(user); }}
法1:在控制器UserController.java中添加自定义编辑器
// 在控制器初始化时调用 @InitBinder public void initBinder(WebDataBinder binder) { // 注册指定自定义的编辑器 binder.registerCustomEditor(User.class, new UserEditor()); }
法2:使用WebBindingInitializer装配全局范围使用的编辑器
com.web/MyBindingInitializer.java
import org.springframework.web.bind.WebDataBinder;import org.springframework.web.bind.support.WebBindingInitializer;import org.springframework.web.context.request.WebRequest;import com.domain.User;import com.domain.UserEditor;public class MyBindingInitializer implements WebBindingInitializer{ public void initBinder(WebDataBinder binder, WebRequest request) { binder.registerCustomEditor(User.class, new UserEditor()); }}
再在baobaotao-servlet.xml中配置
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" p:messageConverters-ref="messageConverters"> <property name="webBindingInitializer"> <bean class="com.web.MyBindingInitializer" /> </property> </bean>
- 15.4 处理方法的数据绑定
- 处理方法中的数据绑定
- TreeView数据绑定的方法
- GridView绑定数据的方法
- datagrid中绑定需要处理的数据
- 数据绑定后显示的方法
- 引用 常用的前台数据绑定方法
- ASPxNavBar 代码绑定数据的方法
- 小D的TreeView数据绑定方法
- DropDownList绑定数据的两种方法
- LISTVIEW绑定数据的两种方法
- DropDownList与DataTable数据绑定的方法
- <%# Eval("ArticleName") %>绑定后台数据的方法
- ListView绑定数据的两种方法
- ListView 数据绑定的两种方法
- 几个常用绑定数据的方法
- JSON的方法及数据绑定
- C#数据绑定方法
- spark 读取avro文件
- lambda表达式代替匿名内部类
- LCD的时钟显示
- 基于机器学习技术实现一个医学辅助诊断的专家系统原型
- 题目1486:False coin
- 15.4 处理方法的数据绑定
- leetcode -- 53. Maximum Subarray
- springmvct原理
- bootstrap框架中的data-[ ]自定义属性理解
- Effective前端6:避免页面卡顿
- React Native常用组件样式总结
- 算法学习(三)——选择排序
- C# 在多线程中如何调用Winform
- 指针深入理解