一尘不染

使用DTO绑定多个动态创建的字段的相同属性名称

jsp

我有2个下拉菜单AB

  • A 是正常的下拉菜单
  • B 是多选下拉列表

A包含学校的课程列表,并B包含学校的部门

还有一个用于动态创建这两个下拉菜单的按钮(可能有 n个 下拉菜单)

我想同时将 n个
下拉列表值保存到数据库中,但是问题是我所有动态创建的字段属性名称都与原始的两个下拉列表相同,这样我就可以将最后一个下拉列表的值输入到后端。我可以使用js动态更改属性名称,但不能在dto中动态创建变量。

我希望我的n个下拉值绑定到与列表相同的DTO变量中,诸如此类,还有其他方法可以实现此目的吗?我研究去了apache commons collections4autopopulatingList,但我没有找到任何合适的例子

我的DTO课程

public class TestDto {
    private Long fkcl;
    private String[] fkdiv;

    public Long getFkcl() {
        return fkcl;
    }
    public void setFkcl(Long fkcl) {
        this.fkcl = fkcl;
    }
    public String[] getFkdiv() {
        return fkdiv;
    }
    public void setFkdiv(String[] fkdiv) {
        this.fkdiv = fkdiv;
    }

ClassDes

public class ClassDes {

    public List<TestDto> list = new ArrayList<TestDto>();

    public List<TestDto> getList() {

        return list;
    }

    public void setList(List<TestDto> list) {
        this.list = list;
    }

}

控制者

@RequestMapping(value = "/testing")
    public  ModelAndView ff(Model model) {


        ClassDes testprof = new ClassDes();
        List<ClassMaster> bslist = serv.findAllclass();
        model.addAttribute("blah", bslist);
        List<StudentMaster> std = stdServ.findAll();
        model.addAttribute("std", std);

         return new ModelAndView("test" , "testprof", testprof);
    }

    @RequestMapping(value = "/save", method = RequestMethod.POST)
    public ModelAndView save(@ModelAttribute ClassDes testprof) {

        System.out.println(BasicGson.toGson(testprof));

        return new ModelAndView("redirect:/testing", "testprof", testprof);
    }

但是我的列表返回空,{"list":[]}但是在我的ajax方法中,它显示

{"listed[].fkcl":"3","listed[].fkdiv":["1","2","3","4","5"]}

阅读 352

收藏
2020-06-10

共1个答案

一尘不染

您可以在js中更改您的Submitform函数

$('#submitForm').submit(function(e) {

            var frm = $('#submitForm');
            e.preventDefault();

            var data = {};
            var dt=[];
            var newdt = {};
            var Form = this;

            $.each(this, function(i, v) {
                var input = $(v);
                if(data.hasOwnProperty("fkcl")) //mapped all dropdown values to fkcl and fkdiv inorder to use `TestDto` variables
                    {
                    if(data.hasOwnProperty("fkdiv"))
                        {
                        dt.push(data);
                        data={};
                        }
                    }
                data[input.attr("name")] = input.val();
                delete data["undefined"];
            });


            newdt['list']=dt;
            alert(JSON.stringify(newdt));

            $.ajax({
                 async : false,
                global : false, 
                contentType : 'application/json; charset=utf-8',
                type : 'post',
                url : frm.attr('action'),
                data : JSON.stringify(newdt),

                success : function(callback) {
                    window.location.reload();
                },
                error : function() {
                    $(this).html("Error!");
                } 
            });

@Controller

@RequestMapping(value = "/save", method = RequestMethod.POST)
    public void save(@RequestBody ClassDes testprof) {

       for (TestDto t : testprof.getList()) {
        serv.save(t);
    }

        return new "redirect:/testing";
    }
2020-06-10