java - 使用DTO绑定(bind)多个动态创建字段的相同属性名

标签 java jquery jsp

我有 2 个下拉菜单 AB

  • A 是一个普通的下拉列表
  • B 是多选下拉列表

A 包含学校中的类(class)列表,B 包含学校中的部门

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

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

我希望我的 n 个下拉值绑定(bind)到相同的 DTO 变量作为列表或类似的东西,是否有其他方法可以实现此目的? 我研究并使用了 apache commons collections4autopopulatedList 但我没有找到任何合适的例子

我的 DTO 类(class)

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

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

}

Controller

@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"]}

最佳答案

你可以在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";
    }

关于java - 使用DTO绑定(bind)多个动态创建字段的相同属性名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45005544/

相关文章:

javascript - 在另一个选择列表中进行选择后如何显示/隐藏选择列表?

javascript - jquery html() 不适用于 Chrome 中的定位元素

java - 从组合框获取值(value)到jsp中的servlet

java - 如何更改显示宽度:column of display tag table

java - OGNL exp 未评估其日期值

java -\n 从文件读取到列表然后输出时不起作用。 java

java - 这 13 个字节长多少?

java - 用于划分数据集的子列表

jQuery DataTables - 响应表头不适用于 asp gridview

linux - 是否可以在linux中安装没有jdk的eclipse