2010-03-19 5 views
0

스프링 MVC를 사용하면 여러 엔티티의 속성을 가진 엔티티에 매핑되지 않는 양식을 어떻게 만들 수 있습니까?엔티티에 매핑되지 않는 폼 만들기

나는 또한 확인하고 오류 수집 등

이의 모든 온라인 예제를 가지고 자신의 '결과'객체를 사용하려면

? 그것을 이해하는 데 필요합니다 (초보자)

답변

0

양식에 필요한 모든 속성을 포함하는 새 클래스를 만들고 양식의 모델 특성으로 사용하기 만하면됩니다. 수신 통화에서이 유형도 사용할 수 있습니다. Spring은 자동으로 속성을 바인딩합니다. JSR-303 유효성 검사 주석을 사용하는 것도 고려해야합니다.

일반적인 접근 방법은 GET 요청에서 양식지지 개체를 만들기 위해 필요한 모든 엔터티를로드하는 것입니다. 그런 다음 해당 양식 백업 객체를 모델에 넣습니다. POST/PUT 요청에서 실제 접촉 한 엔티티를 재구성해야합니다. 일반적으로 다시로드 한 다음 제출 된 새 부분 데이터를 적용합니다.

일반적으로 컨트롤러를 해당 코드로 오염시키지 않으면 서 조립 동작을 처리하는 전용 구성 요소를 만드는 것이 좋습니다.

/** 
* Prepares the form by setting up a custom form backing object. 
*/ 
@RequestMapping(value = "account/{id}", method = GET) 
public String processGet(@PathVariable("id") Long id, Model model) { 

    Account account = accountService.getAccount(id); 
    return prepareForm(dtoAssembler.createFormFor(account), model); 
} 


/** 
* Process form submission. Uses JSR-303 validation and explicit error 
* handling. 
*/ 
@RequestMapping(value = "account/{id}", method = PUT) 
public String processGet(@ModelAttribute("accountForm") @Valid AccountForm form, Errors errors, Model model) { 

    if (errors.hasErrors()) { 
    return prepareForm(form, model); 
    } 

    Account account = accountService.getAccount(form.getId()); 
    accountService.save(dtoAssembler.applyData(account, form)); 

    return "redirect:/accounts"; 
} 


/** 
* Populates the given {@code Model} with the given {@code AccountForm} 
* and returns the view to show the form. 
*/  
private String prepareForm(AccountForm form, Model model) { 
    model.addAttribute("accountForm", form); 
    return "account"; 
} 

나는이 일을 어떻게 진행하고 있는지 여기에서 이렇게 썼습니다. 실제 시나리오에서는 아마도 DtoAssembler가 서비스에 대한 모든 작업을 수행하게 할 것입니다 (그래서 나는 어셈블러에 서비스를 주입 할 것입니다).

Dozer를 사용하여 DTO에서 도메인 객체로 데이터를 쉽게 전송할 수 있도록 BeanUtils 또는 이와 비슷한 것이 좋습니다.

+0

그래서 get 요청에서 엔터티를로드 한 다음 폼 속성이 들어있는 클래스를로드합니다. 게시물에, 나는 무엇을 할 것인가? (아마도 작은 의사 코드일까요?) 감사합니다! – Blankman

+0

내 의견과 관련하여 내 게시물이 업데이트되었습니다. :) –

관련 문제