Java Spring3MVC:动态表单中的一对多(创建/更新时添加/删除)
我正在寻找一种解决方案,使用jQuery管理HTML表单中的一对多关系。我正在使用Spring、springmvc和Hibernate进行开发。我在网上找到了很多曲目,但没有一个完整的例子 背景 我有三个JPA实体:Java Spring3MVC:动态表单中的一对多(创建/更新时添加/删除),java,hibernate,spring-mvc,one-to-many,dynamicform,Java,Hibernate,Spring Mvc,One To Many,Dynamicform,我正在寻找一种解决方案,使用jQuery管理HTML表单中的一对多关系。我正在使用Spring、springmvc和Hibernate进行开发。我在网上找到了很多曲目,但没有一个完整的例子 背景 我有三个JPA实体: Consult.java(1) @实体 @表(name=“consult”) 公开课咨询 私有整数id; 私有字符串标签; 私人咨询公司; /*接球手和接球手*/ } ConsultTechno.java(2) @实体 @表(name=“咨询技术”) 公共类咨询公司{ 私有整数i
Consult.java
(1)
@实体
@表(name=“consult”)
公开课咨询
私有整数id;
私有字符串标签;
私人咨询公司;
/*接球手和接球手*/
}
ConsultTechno.java
(2)
@实体
@表(name=“咨询技术”)
公共类咨询公司{
私有整数id;
私营科技公司;
私人咨询;
私有字符串级别;
/*接球手和接球手*/
}
Techno.java
(3)
@实体
@表(name=“techno”)
公共级技术{
私有整数id;
私有字符串标签;
私人咨询公司;
/*接球手和接球手*/
}
如图所示,一个Consult(1)包含n个ConsultTechnos(2),它们由一个level和一个Techno(3)表示
需求
使用HTML表单,我希望有一个添加一个techno
按钮,可以在DOM中动态添加两个字段:
当然,每次用户单击按钮时,都应该重新添加这两个字段,以此类推。我选择了input type=“text”
作为示例,但最后,字段将是两个select
应涵盖四种操作:
@modeldattribute consult
你知道怎么做那种工作吗?我希望我已经足够清楚了
提前感谢
:)
这一点在网络上仍然非常混乱和不清楚,因此以下是我解决问题的方法。此解决方案可能不是最优化的解决方案,但它在创建和更新主实体时有效
理论
列表
而不是集合
列表初始化为一个。这是一个惰性列表,允许动态添加元素
int
的属性remove
。这将扮演布尔标志的角色,在动态删除元素时非常有用0
上有标记remove
的元素(即false
)Employer.java
@实体
@表(name=“雇主”)
公营雇主
私有整数id;
私有字符串名;
私有字符串lastname;
私人弦公司;
私人名单雇员;//一对多
/*接球手和接球手*/
}
Employee.java
@实体
@表(name=“employee”)
公营雇员{
私有整数id;
@瞬态//表示“不是DB字段”
私有整数删除;//布尔标志
私有字符串名;
私有字符串lastname;
私人雇主;//多对一
/*接球手和接球手*/
}
控制器:
employeercontroller.java
@控制器
@请求映射(“雇主”)
公共类EmployeerController{
//动态管理添加或删除的员工
私人雇员名单(雇主){
//存储不应持续的员工
List employees2remove=新建ArrayList();
if(employer.getEmployees()!=null){
for(迭代器i=employer.getEmployees().Iterator();i.hasNext();){
Employee=i.next();
//如果删除标志为true,则从列表中删除该员工
if(employee.getRemove()==1){
employees2remove.add(员工);
i、 删除();
//否则,请执行链接
}否则{
雇员。雇主(雇主);
}
}
}
返回员工2移除;
}
//--创建新雇主----------
@RequestMapping(value=“create”,method=RequestMethod.GET)
创建公共字符串(@ModelAttribute雇主,模型模型){
//应该初始化AutopopulationGlist吗
返回创建(雇主、模型、真实);
}
创建私有字符串(雇主、模型、布尔初始化){
if(init){
//在自动人群英语中
雇主.setEmployees(新的自动人口英语(Employee.class));
}
model.addAttribute(“type”、“create”);
返回“雇主/编辑”;
}
@RequestMapping(value=“create”,method=RequestMethod.POST)
创建公共字符串(@Valid@modeldattribute雇主,BindingResult BindingResult,Model模型){
if(bindingResult.hasErrors()){
//不应该重新初始化AutoPopulationGlist
返回创建(雇主、模型、假);
}
//调用私有方法
管理雇员(雇主);
//坚持雇主
Employeerservice.save(雇主);
<form:form action="yourURL.htm" command="employeeDto">
<form:input type="text" name="consult.consultTechnos[].techno.id" />
<form:input type="text" name="consult.consultTechnos[].level" />
<form:form>