Несколько форм с использованием Spring и Spring Roo - PullRequest
2 голосов
/ 20 августа 2011

Я нахожусь в процессе изучения, как использовать 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.

Буду признателен за любые предложения или помощь.Спасибо.

Ответы [ 2 ]

2 голосов
/ 20 августа 2011

Самый простой способ - позволить Roo сгенерировать контроллер для обновления пользователя. Затем скопируйте созданный метод контроллера (updateForm) из файла? _Roo_Controller.aj в классе контроллера (используйте рефакторинг «Push In» в представлении структуры файла AspectJ.)).

Roo распознает это и удалит метод updateForm из файла aj.

Тогда вы можете улучшить метод, как вы хотите.


В любом случае с вашей страницей в двух формах вы покидаете поддержку Roo. Так что может быть лучше и чище позволить roo генерировать класс контроллера и jspx, а затем отключить поддержку roo для ЭТОГО контроллера. (Запустите «Push In» и удалите аннотацию @RooWebScaffold). Roo удалит файл? _Roo_Controller.aj.

Но не удаляйте аннотацию @RequestMapping, она является частью Spring-MVC (не Roo).

0 голосов
/ 13 октября 2011

Как описал Ральф, сначала нужно добавить метод 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";
}

Ваш вид должен работать.

...