Tag: data binding

Spring CustomNumberEditor解析不是数字的数字

我正在使用Spring CustomNumberEditor编辑器来绑定我的浮点值,并且我已经尝试过,如果值不是数字,有时它可以解析该值并且不返回任何错误。 数字= 10 ……那么数字是10,没有错误 number = 10a ……那么数字是10,没有错误 number = 10a25 ……那么数字是10并且没有错误 number = a ……错误,因为该数字无效 因此,似乎编辑器会解析该值,直到它能够并省略其余的值。 有没有办法配置这个编辑器所以validation是严格的(所以数字像10a或10a25导致错误)或我是否必须构建我的自定义实现。 我看起来像在CustomDateEditor / DateFormat中将lenient设置为false,因此无法将日期解析为最可能的日期。 我注册编辑器的方式是: @InitBinder public void initBinder(WebDataBinder binder){ NumberFormat numberFormat = NumberFormat.getInstance(); numberFormat.setGroupingUsed(false); binder.registerCustomEditor(Float.class, new CustomNumberEditor(Float.class, numberFormat, true)); } 谢谢。

如何从Spring MVC中的请求参数中修剪空格

我很难相信我需要从请求参数中修剪前导空格和尾随空格并不是一个常见的要求,但我似乎找不到任何能够很好地解决它的人。 当然,有一些简单的方法可以配置,例如,Spring WebDataBinder在将它们映射到目标对象之前从参数值中修剪所有空格? 我真的很想知道其他人是如何解决这个问题的。

无法将java.lang.String类型的属性值转换为必需类型java.util.Date

当我尝试在表单中输入日期时,我收到此错误。 TaskController @RequestMapping(value = “/docreatetask”, method = RequestMethod.POST) public String doCreateTask(Model model, @Valid Task task, BindingResult result, Principal principal, @RequestParam(value = “delete”, required = false) String delete) { System.out.println(“>TaskController doCreateTask ” + task); if (result.hasErrors()) { System.out.println(“/docreatetask in here”); model.addAttribute(“task”, task); System.out.println(“+++++”+task.getDeadline());// deadline is null return “createtask”; } … Create.jsp … Task Description Deadline (dd/mm/yyyy) […]

绑定Set集合中的对象

我有一个填充Collection的一些对象的表单。 我用List实现了集合(一切都运行良好),但现在我想使用Set。 我有一个注册的属性编辑器来创建对象。 问题是我不知道填充Set对象时必须使用的语法是什么。 public class MyObject(){ Set otherObjects = new HashSet(); } 我已尝试使用表单标记中的语法,如语法列表: name=”otherObjects[‘${status.index}’]” 和地图的语法一样: name=”otherObjects[‘${id}’]” 但两者都出现错误,因为“索引属性路径’otherObjects [0]’中引用的属性既不是数组也不是List也不是Map” 我也尝试过 name=”otherObjects” 但这并没有填满对象。 任何人都可以告诉我如何将数据绑定到Set中的对象。 谢谢

@ModelAttribute在一个方法中

想象一下像这样的代码: @RequestMapping(value=”/users”, method=RequestMethod.GET) public String list(Model model) { … } @InitBinder(“user”) public void initBinder(WebDataBinder binder) { binder.setDisallowedFields(“password”); // Don’t allow user to override the value } @ModelAttribute(“user”) public User prepareUser(@RequestParam(“username”) String username){ … } @RequestMapping(value=”/user/save”, method=RequestMethod.POST) public String save(@ModelAttribute(“user”) User user, Model model) { … } 我使用init绑定器来避免字段可以绑定,我用@ModelAttribute标记一个方法(prepareUser())来准备我的User对象,然后绑定它。 所以当我调用/ user / save initBinder()和prepareUser()时执行。 我在@InitBinder和@ModelAttribute中都设置了“user”,因此Spring-MVC可以理解只应在使用@ModelAttribute(“user”)执行方法之前应用此方法。 问题是使用@ModelAttribute(“user”)注释的方法在该控制器的每个映射方法之前执行。 例如,如果我调用/ […]

Spring MVC自定义方法参数绑定

我正在寻找一种方法来自定义默认的Spring MVC参数绑定。 以此方法为例: @RequestMapping(value=”/index.html”) public ModelAndView doIndex(@RequestParam String param) { … 当我只有一个我想从请求中提取的String ,这很容易。 但是,我想填充更完整的对象,以便我的方法如下所示: @RequestMapping(value=”/index.html”) public ModelAndView doIndex(Foo bar) { … 我正在寻找的是一种声明像这样的绑定的方法; @RequestMapping(value=”/index.html”) public ModelAndView doIndex(@FooPopulator Foo bar) { … 并有一些其他类型的实现者(由@FooPopulator注释确定)执行此操作: public void doBind(Foo target, ServletRequest originalRequest) { target.setX(this.computeStuffBasedOn(originalRequest)); target.sety(y); } 到目前为止,我已经了解了@InitBinder绑定器注释,但我不确定这是否真的是这个场景的正确选择。 什么是最好的方式?