java - SpringMVC自定义集合编辑器不将数据返回到Jsp

标签 java jquery spring spring-mvc

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

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

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

下面是代码:

自定义集合编辑器

@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;        
         }

    }); 

Controller 中的 DAO 填充的 Jsp

这包含填充表单 DAO 类的数据,当单击按钮时,它会从列表中获取数据并将其附加到绑定(bind)到 POJO 的另一个列表

<label>Victims List</label><buttonid="addVictimBtn">/button>
<form:select path="" id="dbvictims" title="Victims Of Crime" class="victimLst">
<form:options items="${dbvictims.dbvictimList}" itemValue="socialSecurityNumber" itemLabel="name"/>
</form:select>  

Jsp选择绑定(bind)到POJO的项目

<label>Victims In Crime</label><button id="removeVictimBtn">-</button> 
<form:select path="victims" id="victims" title="Victims Of Crime"  multiple="multiple" class="victimLst">
<form:options items="${victimList}" itemValue="socialSecurityNumber" itemLabel="name"/>
</form:select><form:errors path="victims" class="errors" />                            

最佳答案

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

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

我省略的部分是将列表对象从 Controller 传递回 View 。

Controller

@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*");
...............

关于java - SpringMVC自定义集合编辑器不将数据返回到Jsp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15746371/

相关文章:

javascript - 具有固定标题的可调整大小的列表

mysql - 具有双向关联的 Hibernate 删除问题

java - 如何配置Spring集成?

带有 SSL 的 Java/Spring UnrecoverableKeyException

java - 在什么情况下静态方法是一个好习惯?

java - Maven 程序集插件从特定依赖项中排除文件

javascript - Jquery Ajax 到 PHP 脚本不读取数据

java - 小服务程序 : Cannot forward after response has been committed

java - 如果在 Java 的字符串中有多个空格,如何将它们压缩成单词之间的一个空格?

javascript - div自动计算高度