使用不在主对象中的列表对象保存主对象

时间:2014-04-11 09:51:15

标签: java jquery spring spring-mvc

我想从表单中保存object C。此表单包含两个选择下拉列表,每个下拉列表代表class Aclass BClass Cclass A有联系,class Aclass B有列表连接。

当我从表单中保存object C时,我从选择下拉class A中选择一项,从class B中选择一项。 C的新ID和A的选择ID将保存到db表db_C,并且选择B的ID应与新创建的ID一起保存C以及数据库D的新ID db_D,其中包含与BC的连接。

表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">&nbsp;</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">&nbsp;</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的表单中选择BC,然后保存我想将我在表单中输入的所有值保存到{{ 1}}和db_C分别。

我希望有人可以帮助我:)。

我编辑了这个问题,因为第一个问题有点令人困惑。

1 个答案:

答案 0 :(得分:0)

我创建了一个带有打印和解析功能的新类AFormatter。这就行了!