2012-09-25 7 views
0

저는 Spring 3.1.0.RELEASE를 사용하고 있습니다. 어떤 이유로 인해 내 컨트롤러에서 오류가 발생했을 때 폼을 POST하고 원래 화면으로 되돌릴 때 GET 메서드를 통해 페이지를 호출 할 때와 같이 모델 특성이 채워지지 않습니다. 내 컨트롤러에 있음스프링 모델에 적절한 속성이 채워지지 않는 이유는 무엇입니까?

@Controller 
public class StandardsUploadController { 

    … 
    @RequestMapping(value = "/upload") 
    public String getUploadForm(Model model) { 
     model.addAttribute(new StandardsUploadItem()); 
     model.addAttribute("gradeList", gradeList); 
     model.addAttribute("subjectList", subjectList); 
     return "upload/index"; 
    } 

    @RequestMapping(value = "/upload", method = RequestMethod.POST) 
    public ModelAndView processFile(final StandardsUploadItem uploadItem, 
     final BindingResult result, 
     final HttpServletRequest request, 
     final HttpServletResponse response) throws InvalidFormatException, CreateException, NamingException { 

     stdsUploadValidator.validate(uploadItem, result); 
     if (!result.hasErrors()) { 
      try { 
       …  
      } catch (IOException e) { 
       LOG.error(e.getMessage(), e); 
       e.printStackTrace(); 
      } 
     } // if 

     return new ModelAndView("upload/index"); 
    } 

내가 뭘 잘못하고 어떻게 해결할 수 있습니까?

답변

1

POST에서 업로드/색인보기로 돌아 가면 모델 채우기 코드가 GET에서 완료되므로 모델을 다시 채우지 않습니다.

@ModelAttribute("uploadItem") 
public StandardsUploadItem getStandardsUploadItem(){ 
    return new StandardsUploadItem(); 
} 

당신은 다음을 제거 할 수 있습니다 :

당신은 것

, 예를 들어, StandardsUploadItem이처럼 보이는 방법은

하나의 잠재적 인 옵션은 컨트롤러 클래스의 @ModelAttribute 주석을 사용하는 것입니다 아래의 GET 메소드 아래 라인 :

@ModelAttribute로 주석을 추가하고 객체를 반환하는 메소드는 어떤 Controller RequestMapping 메소드가 활성화되었는지에 관계없이 ModelMap에 넣을 수 있습니다.

..., @ModelAttribute("uploadItem") StandardsUploadItem uploadItem, ... 

당신은 모델 (gradeList 및 subjectList)의 다른 속성에 대한 비슷한 할 필요가있을 것이다, 그러나 당신이 있기 때문에하지 :

POST 메소드에 대한 귀하의 메소드 서명은 다음과 같이 포함됩니다 POST에서 그것들이 필요할 것 같으면 POST 메서드 서명에 Model 매개 변수를 추가하고 오류 케이스에서 ModelAndView를 반환하기 전에 해당 모델을 다시 채우는 것과 같은 작업을 수행 할 수 있습니다.

관련 문제