Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.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
Javascript 当没有/更少的路径值被提交时,如何强制Spring表单清空列表?_Javascript_Java_Spring_Spring Mvc_Spring Form - Fatal编程技术网

Javascript 当没有/更少的路径值被提交时,如何强制Spring表单清空列表?

Javascript 当没有/更少的路径值被提交时,如何强制Spring表单清空列表?,javascript,java,spring,spring-mvc,spring-form,Javascript,Java,Spring,Spring Mvc,Spring Form,设置: public class MyClass { private List<Integer> selectedNumbers; public MyClass() { } public void setSelectedNumbers(List<Integer> selectedNumbers) { this.selected

设置:



    public class MyClass 
    {
        private List<Integer> selectedNumbers;

        public MyClass()
        {

        }

        public void setSelectedNumbers(List<Integer> selectedNumbers)
        {
            this.selectedNumbers = selectedNumbers;
        }

        public List<Integer> getSelectedNumbers()
        {
            return selectedNumbers;
        }
    }



    @Controller
    @SessionAttributes({"attributeOne", "attributeTwo"})
    @RequestMapping(value = "/mypage")
    public class MyController
    {
        @ModelAttribute
        private MyClass initMyClass()
        {
            return new MyClass();
        }

        @RequestMapping(value = "/mytablepage", method = RequestMethod.GET)
        public String getMyTablePage(Model model, @ModelAttribute("attributeOne") MyClass myClass)
        {
            return "mypage.mytablepage";
        }

        @RequestMapping(value = "/mytablepage", method = RequestMethod.POST)
        public String postMyTablePage(Model model, @ModelAttribute("attributeOne") MyClass myClass, BindingResult bindResult)
        {
            //Validate and check for bind errors.
            ...
            //End Validate and check for bind errors.

            return "redirect:nextpage.do";
        }
    }

  • 弹簧4.3.5.1释放
  • Tomcat 8.5.11
  • Maven 4.0.0
  • Java 1.8
项目背景:
我有一个包含三个表的JSP。其中两个表(标题为“未选定”和“选定”)的行为非常类似于链接的选定元素,它们在彼此之间传输行。第三个表(标题为“预定义”)主要用于将预选数量的项目从未选中的表添加到选中的表中。这里最重要的是,所选表将包含多行,这些行的数据属性与数字关联

因为似乎没有Spring表单标记可以从表行中剥离数据属性值,所以我有一些Javascript来维护隐藏的输入元素以匹配所选表中的值。其格式为:
。()

下面是如何设置类和控制器:
类别:



    public class MyClass 
    {
        private List<Integer> selectedNumbers;

        public MyClass()
        {

        }

        public void setSelectedNumbers(List<Integer> selectedNumbers)
        {
            this.selectedNumbers = selectedNumbers;
        }

        public List<Integer> getSelectedNumbers()
        {
            return selectedNumbers;
        }
    }



    @Controller
    @SessionAttributes({"attributeOne", "attributeTwo"})
    @RequestMapping(value = "/mypage")
    public class MyController
    {
        @ModelAttribute
        private MyClass initMyClass()
        {
            return new MyClass();
        }

        @RequestMapping(value = "/mytablepage", method = RequestMethod.GET)
        public String getMyTablePage(Model model, @ModelAttribute("attributeOne") MyClass myClass)
        {
            return "mypage.mytablepage";
        }

        @RequestMapping(value = "/mytablepage", method = RequestMethod.POST)
        public String postMyTablePage(Model model, @ModelAttribute("attributeOne") MyClass myClass, BindingResult bindResult)
        {
            //Validate and check for bind errors.
            ...
            //End Validate and check for bind errors.

            return "redirect:nextpage.do";
        }
    }

问题主要在于Spring似乎只对列表值执行一种类型的更新,而不是从头开始重新创建列表。这最终导致被删除的剩余值持续存在,因为似乎没有办法让SpringDelete删除这些值

以下是该场景的一个示例:

  • 加上1111号。[1111]
  • 加上2222号。[11112222]
  • 加上3333号。[1111223333]
  • 加上4444号。[111122333344444]
  • 继续下一页。(模型属性更新)。
    • 没有以前的值,因此列表为[11112223334444]
  • 返回页面
  • 删除号码3333。[1111224444]
  • 删除1111号。[2222444]
  • 继续下一页。(模型属性更新)。
    • 我们只发送了两个值,因此它更新了之前列表中的前两个值,结果是[222444433334444]
  • 问题:
    有没有办法强迫Spring总是创建一个新列表,或者确保没有遗留值

    我目前的解决办法是永远不要真正从列表中删除这些值;相反,我本质上为它们设置了空值,并在控制器中设置了一个过滤器,通过检查空值并删除它们来压缩列表。这是正常的吗

    如果有什么不合理的地方,或者没有反映出我所说的,请告诉我。我试图将其中的很多因素最小化,所以肯定还有其他一些我没有想到的因素