我想从表单中保存object C
。此表单包含两个选择下拉列表,每个下拉列表代表class A
和class B
。
Class C
与class A
有联系,class A
与class B
有列表连接。
当我从表单中保存object C
时,我从选择下拉class A
中选择一项,从class B
中选择一项。
C
的新ID和A
的选择ID将保存到db表db_C
,并且选择B
的ID应与新创建的ID一起保存C
以及数据库D
的新ID db_D
,其中包含与B
和C
的连接。
表db_A
__A__
1
2
3
表db_B
__B__|__C__
4 | 2
5 | 1
表db_C
__C__|__A__
1 | 2
2 | 3
表db_D
__D__|__B__|__C__
1 2 1
我有一个C:
的控制器@RequestMapping(value = "/new", method = RequestMethod.GET)
public String add(Model model) {
model.addAttribute("listOfAs", listOfAs());
model.addAttribute("C", new C());
model.addAttribute("listOfBs", listOfBs());
return "C/edit";
}
private List<B> listOfBs() {
List<B> listOfBs = new ArrayList<>();
try {
listOfBs.addAll(BService.listBs());
} catch(DataAccessException ex) {
logger.error(ex.getMessage(), ex);
}
return listOfBs;
}
private List<A> listOfAs() {
List<A> listOfAs = new ArrayList<>();
try {
listOfAs.addAll(AService.listAs());
} catch (DataAccessException ex) {
logger.error(ex.getMessage(), ex);
}
return listOfAs;
}
@RequestMapping(value = "/save", method = RequestMethod.POST)
public String update(Model model, @ModelAttribute("C") C C, BindingResult CResult) {
C.setA(AService.getA(C.getA().getID()));
System.out.println(C.getA().getBs().isEmpty()); //Prints "True"
if (C.getID() == 0) {
CService.save(C);
} else {
CService.update(C.getID(), C);
}
return "redirect:/mvc/C/viewList";
}
我的C形式
<s:url value="/mvc/C/save" var="actionUrl" />
<sf:form method="POST" modelAttribute="C" action="${actionUrl}">
<fieldset>
<table>
<tr>
<th><label for="A">A:</label></th>
<td><sf:select path="A.ID">
<sf:option value="0"> </sf:option>
<sf:options items="${listOfAs}" itemLabel="name" itemValue="ID" />
</sf:select></td>
</tr>
<tr>
<th><label for="B">B:</label></th>
<td>
<sf:select path="A.listRefToB">
<sf:option value="0"> </sf:option>
<sf:options items="${listOfBs}" itemLabel="name" itemValue="ID" />
</sf:select>
</td>
</tr>
<tr>
<td colspan="2">
<input id="saveButton" class="right" type="submit" title="Save" value=" [ Save ] " />
</td>
</tr>
</table>
</fieldset>
</sf:form>
问题是,当我保存时,我得到一个Bs
的空列表。我认为这是因为C
没有直接引用B
。但我不确定。我真的需要帮助!如何将B
的选定值放入保存函数??
我已尝试过这两个没有结果的链接
List<Foo> as form backing object using spring 3 mvc, correct syntax?
How to send list of Objects to View and back to Post method in controller
我没有在选项标签中输入姓名和ID。
这样做的目的是在A
的表单中选择B
和C
,然后保存我想将我在表单中输入的所有值保存到{{ 1}}和db_C
分别。
我希望有人可以帮助我:)。
我编辑了这个问题,因为第一个问题有点令人困惑。
答案 0 :(得分:0)
我创建了一个带有打印和解析功能的新类AFormatter。这就行了!