2011-08-20 3 views
2

나는 봄과 봄의 Roo를 사용하는 법을 배우고있다. 단일 페이지에서 여러 양식을 처리 할 수있는 시나리오가 있습니다. 예를 들어 사용자가 한 페이지에서 사람의 정보와 주소를 업데이트 할 수있는 단일 페이지를 만드는 것입니다. 데이터 관점에서 이들은 서로 다른 두 개체입니다.봄과 봄을 사용하는 다중 폼 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

가장 쉬운 방법은 Roo가 사람 업데이트 용 컨트롤러를 생성하도록하는 것입니다. 그런 다음 생성 된 컨트롤러 메소드 (updateForm)를 컨트롤러 클래스의? _Roo_Controller.aj 파일에서 복사합니다 (AspectJ 파일의 외곽 뷰에서 "밀어 넣기"리팩토링 사용).

Roo가이를 인식하고 aj 파일에서 updateForm 메소드를 제거합니다.

그런 다음 원하는대로 방법을 향상시킬 수 있습니다.


어쨌든 Two-Form-Page는 Roo의 지원을 떠납니다. 따라서 컨트롤러 클래스와 jspx를 생성하고이 컨트롤러에 대한 roo 지원을 비활성화하도록 설정하는 것이 더 낫고 깨끗할 수 있습니다. ("Push In"을 실행하고 @RooWebScaffold 어노테이션 제거) Roo? _Roo_Controller.aj 파일이 삭제됩니다.

그러나 @RequestMapping 주석을 삭제하지 마십시오. 주석은 Spring MVC (Roo가 아님)의 일부입니다.

+0

해답은 Ralph, 질문은 Tanin입니다. Roo 개발의이 부분은 공식 문서에서도 쉽게 찾을 수 없다고 생각합니다. – will824

0

랄프가 설명했듯이 먼저 createForm-method를 푸시 (push-in)해야합니다.

그런 다음 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"; 
} 

로보기 지금 작동합니다.