我有 2 个下拉菜单 A
和 B
。
A
是一个普通的下拉列表B
是多选下拉列表
A
包含学校中的类(class)列表,B
包含学校中的部门
还有一个用于动态创建这两个下拉菜单的按钮(可能有n个下拉菜单)
我想将n个下拉列表值同时保存到我的数据库中,但问题是我所有动态创建的字段属性名称都与原始两个下拉列表相同,这样我就可以获得最后一个下拉列表的值进入我的后端。我可以使用 js 动态更改属性名称,但无法在 dto 中动态创建变量。
我希望我的 n 个下拉值绑定(bind)到相同的 DTO 变量作为列表或类似的东西,是否有其他方法可以实现此目的?
我研究并使用了 apache commons collections4
和 autopopulatedList
但我没有找到任何合适的例子
我的 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/