使用DTO

时间:2017-07-10 06:57:20

标签: java jquery 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"]}

2 个答案:

答案 0 :(得分:1)

你可以在js

中更改你的提交表格功能
$('#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";
    }

答案 1 :(得分:0)

当您在表单中动态创建输入节时,我认为最好使用javascript将所有输入组合到JSON对象中。

然后,您可以将JSON对象作为单个表单参数发送到服务器,您可以按照自己的方式处理它。这将简化参数处理过程,因为您只需使用一个。