2013-10-28 1 views
0

왜 내 ID가 @ModelAttribute에 보존되지 않습니까? 내 양식에서 숨겨진 매개 변수로 보내야하는 이유는 무엇입니까? 명령을 사용할 때 이것을 처리해서는 안됩니까?왜 내 ID가 @ModelAttribute에 보존되지 않습니까?

@RequestMapping(value="/{supplierId}", method=RequestMethod.GET) 
public String get(@PathVariable Long supplierId, Model model, Principal principal){ 

    Form form = .... //Got a an existing form from DB 
    model.addAttribute("form", form); 

    return "/form"; 
} 

@RequestMapping(value="/{supplierId}", method=RequestMethod.POST) 
public String post(HttpServletRequest request, @PathVariable Long supplierId, @Valid @ModelAttribute("form") Form form, BindingResult result, Model model, Principal principal){ 

    System.out.println(form.getID()); //Here the id is 0 

    safeFoodFormService.store(form, supplierId); 
    return "redirect:/supplier"; 
} 

내 프리 마커 양식

<form class="form-horizontal" action="<@spring.url "/forms/${supplier.ID?c}"/>" method="post" command="form"> 

나는 내 양식 내부

<@spring.bind "form.ID" /> 

<input type="hidden" name="${spring.status.expression}" value="${spring.status.value default("")}" /> 

이이 봄에 의해 처리 될 수 있다면 아주 좋은 것을이 줄을 추가 할 경우이 작동합니다. 감사합니다

답변

1

스프링 데이터 바인딩은 요청 이름/값 쌍을 취하여 해당 이름의 해당 속성을 해당 값에 바인딩합니다. 따라서 요청시 id 요청 매개 변수가 없으면 spring mvc는 컨트롤러 메소드에 주입 될 모델 bean의 값을 매핑 할 방법이 없습니다. 따라서 어떤 메커니즘에 의해서도 폼은 빈 값에 빈 값을 바인딩 할 수 있도록 입력 (숨김 또는 기타)을 가져야합니다.

관련 문제