SpringMVC自定义集合编辑器不向Jsp返回数据

我在spring绑定了一个多选列表,该项目没有从DAO获取数据,而是从另一个选择选项列表中添加数据。 用户单击一个按钮,数据将使用jquery发送到多选选项列表。

当表单发布时,项目不会发生数据绑定,因为它是一个复杂的数据类型,因此我注册了CustomEditor并将其附加到@initbinder。

编辑我更新了代码, CollectionEditor现在返回一个公民列表回到视图但是我无法获取列表中的数据来填充选择选项。 我正在尝试向列表中添加元素,但是当从服务器返回时,jsp仍然选择保持为null。

下面是代码:

CustomCollectionEditor

@InitBinder("crime") protected void initBinder(WebDataBinder binder, HttpServletRequest request, ServletRequestDataBinder victimbinder){ victimbinder.registerCustomEditor(List.class, "victims", new CustomCollectionEditor(List.class){ protected Object convertElement(Object element){ Citizens victims = new Citizens(); String ssNumber = ""; if (element instanceof String){ ssNumber = (String) element; } logger.debug("element is ;" +element); try { int socialSecurityNumber = Integer.parseInt(ssNumber); victims = citizenManager.getCitizen(socialSecurityNumber); } catch (NumberFormatException e) { logger.error(e.getMessage()); } catch (Exception e) { logger.error(e.getMessage()); } return victims; } }); 

从控制器中的DAO填充的Jsp

这包含在单击按钮时从DAO类填充的数据,它将列表中的数据附加到另一个列表中,该列表绑定到POJO

 /button> 

Jsp选择绑定到POJO的项目

  

这个问题的解决方案非常简单,所有工作都已在CustomCollectionEditor中完成。 这在绑定如上所述的复杂数据类型时很重要。 可能还有其他方法可以做到这一点,但我发现这是一种非常简洁的方法。

return语句非常重要,因为它绑定到视图中元素的item属性。 CustomCollectionEditor返回对象列表( 受害者 )使用DAO从数据库中获取对象。 这很重要,因为post只发送选择值而不是标签,因此我们重新构建列表并重新发送到视图。

我省略的部分是将List Object从控制器传递回视图。

调节器

 @RequestMapping(value="save.htm", method = RequestMethod.POST) public ModelAndView handleSave(@Valid @ModelAttribute Crime crime, BindingResult result, ModelMap m, Model model) throws Exception { if(result.hasErrors()){ model.addAttribute("victimList",crime.getVictims()); return new ModelAndView("*Your View*"); ...............