Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringMVC自定义集合编辑器不向Jsp返回数据_Java_Jquery_Spring_Spring Mvc - Fatal编程技术网

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

Java SpringMVC自定义集合编辑器不向Jsp返回数据,java,jquery,spring,spring-mvc,Java,Jquery,Spring,Spring Mvc,我在spring中绑定了一个多选列表。该项没有从DAO获取数据,数据是从另一个选择选项列表添加的。用户单击一个按钮,然后使用jquery将数据发送到多选选项列表 发布表单时,不会对该项进行数据绑定,因为它是一种复杂的数据类型,所以我注册了一个CustomEditor并将其附加到@initbinder 已编辑 我已经更新了代码,CollectionEditor现在正在将公民列表返回到视图,但是我无法获取列表中的数据以填充选择选项。我试图将元素添加到列表中,但是当从服务器返回时,jsp仍然选择保持n

我在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;        
         }

    }); 
@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*");
...............
从控制器中的DAO填充的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;        
         }

    }); 
@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*");
...............
它包含数据填充的表单DAO类。当单击按钮时,它将从上的列表中获取数据,并将其附加到另一个列表中,在该列表下绑定到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选择绑定到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中完成。这在绑定上述复杂数据类型时非常重要。可能还有其他方法可以做到这一点,但我发现这是一个非常干净和简单的方法

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

我省略的部分是将列表对象从控制器传递回视图

控制器

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

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

我不相信选择选项标签是在HTTP post中发送的,只发送值。我不相信你能直接得到所说的价值观。但是,您可能可以使用隐藏字段执行某些操作。是否有错误?如果没有,那么生成的HTML是什么样子的呢?那么,让我看看是否能够理解正在发生的事情。您有一个SpringMVC控制器,其中定义了一个(at)InitBinder,用于创建CustomCollectionEditor的实例。此CustomCollectionEditor用于填充“受害者列表”。但是,如何在您的模型中设置受害者列表?您还可以粘贴控制器代码吗?看起来您只是想发送SSN,从该SSN的数据库中获取受害者列表,然后将该列表作为模型的一部分发送回页面,对吗?您调用哪个控制器方法来执行此操作?祝贺您,您终于明白了不客气,先生,我还建议您阅读SpringWeb参考资料。