Java 使用Spring和Spring Roo的多种表单

Java 使用Spring和Spring Roo的多种表单,java,spring,spring-mvc,spring-roo,Java,Spring,Spring Mvc,Spring Roo,我正在学习如何使用Spring和Spring Roo。我有一个场景,我希望能够在一个页面上处理多个表单。我的例子是有一个页面,用户可以在一个页面上更新一个人的信息和地址。从数据的角度来看,这是两个不同的实体 这是我的看法 <?xml version="1.0" encoding="UTF-8" standalone="no"?> <div xmlns:field="urn:jsptagdir:/WEB-INF/tags/form/fields" xmlns:form="urn:

我正在学习如何使用Spring和Spring Roo。我有一个场景,我希望能够在一个页面上处理多个表单。我的例子是有一个页面,用户可以在一个页面上更新一个人的信息和地址。从数据的角度来看,这是两个不同的实体

这是我的看法

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<div xmlns:field="urn:jsptagdir:/WEB-INF/tags/form/fields" xmlns:form="urn:jsptagdir:/WEB-INF/tags/form" xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0">
    <jsp:directive.page contentType="text/html;charset=UTF-8"/>
    <jsp:output omit-xml-declaration="yes"/>
    <form:update id="fu_com_demo_demodb_Person" idField="personId" modelAttribute="person" path="/people" versionField="Version" z="lAv+o27QE4hkXQtPdKu/YDmF4fo=">
        <field:simple field="addresses" id="c_com_demo_demodb_Person_addresses" messageCode="entity_reference_not_managed" messageCodeAttribute="Address" z="Qv+QHD5RorE8Zaf6FDT4MO0J55k="/>
        <field:input field="firstName" id="c_com_demo_demodb_Person_firstName" z="vS8EgEHhso2KgUrCIomUBqF4QLI="/>
        <field:input field="lastName" id="c_com_demo_demodb_Person_lastName" z="w0qweGLAQxRPJxxAehZxWpoaVsg="/>
        <field:input field="middleName" id="c_com_demo_demodb_Person_middleName" z="5cuoVeM25fLeZP1PnBA/9Dh13xE="/>
    </form:update>
    <form:update id="fu_com_demo_demodb_Address" idField="addressId" modelAttribute="address" path="/addresses" versionField="Version" z="QH/Ew5OSBOxqFzEqNt6Y/qpjF8g=">
        <field:select field="personId" id="c_com_demo_demodb_Address_personId" itemValue="personId" items="${people}" path="/people" z="ljx4bVEfoA3j/ChDMHPhkKZM4tc="/>
        <field:input field="line1" id="c_com_demo_demodb_Address_line1" z="VzcJoyGz+Kg9YCf9RPzbQ7IYkbk="/>
        <field:input field="line2" id="c_com_demo_demodb_Address_line2" z="FxoV1g01MRUJhNNHGyR2obbr1z8="/>
        <field:input field="city" id="c_com_demo_demodb_Address_city" z="nFaz+RzSUsjxA6pj7O4p6K4Q+2U="/>
        <field:input field="state" id="c_com_demo_demodb_Address_state" z="idFpXGWkGZvlVI/YOk46rXRu2ZA="/>
        <field:input field="zipCode" id="c_com_demo_demodb_Address_zipCode" z="sKg1vzHjd5yi/EjhvwI1iXlVY7c="/>
    </form:update>
</div>

我还没有弄清楚的是如何创建一个能够正确处理上述视图的控制器。我不确定如何处理@RooWebScaffold和@RequestMapping


如有任何建议或协助,将不胜感激。谢谢。

最简单的方法是让Roo为人员更新生成控制器。然后从控制器类中的?_Roo_controller.aj文件复制创建的控制器方法(updateForm)(在AspectJ文件的大纲视图中使用“推入”重构)

Roo将认识到这一点,并从aj文件中删除updateForm方法

然后,您可以根据需要增强该方法


不管怎样,您的两个表单页面将离开Roo的支持。因此,让roo生成控制器类和jspx,然后禁用对该控制器的roo支持可能更好、更干净。(运行“推入”并删除
@roowebscafold
注释)Roo将删除?\u Roo\u Controller.aj文件


但是不要删除
@RequestMapping
注释,它是SpringMVC的一部分(而不是Roo的一部分)。

正如Ralph所描述的,您需要首先推入createForm方法

然后复制addAttribute行并更改实体,如以下代码所示:

@RequestMapping(params = "form", method = RequestMethod.GET)
public String createForm(Model uiModel) {
    uiModel.addAttribute("person", new Person());
    uiModel.addAttribute("address", new Address());
    return "person/update";
}

你的观点现在应该行得通。

谢谢拉尔夫的回答,谢谢塔宁的提问。我认为Roo开发的这一部分不容易找到,即使是在官方文档中。