2013-07-24 2 views
2

나의 양식은 하나 text fielddropdown list있다 .When 내 폼을로드 list of values in the dropdown list이 처음.스프링 MVC 양식 - 드롭 다운 목록에 항목이 없습니까?

form을 제출하고 양식에 errors이있는 경우 동일한 양식을 반환하여 오류를 표시하고 누락 된 데이터를 다시 제출하려고합니다.

그러나 내 양식 reloads에서 POST까지의 방법이 controller 인 경우 드롭 다운 목록에 값이 없습니다.

봄 컨트롤러,

@Controller 
public class FormController { 

    private ListStore getList; 

    @RequestMapping(value="/ApplicationForm.html",method=RequestMethod.GET) 
    public String displayForm(@ModelAttribute UserData userData,ModelMap map){ 

     map.addAttribute("age",(ArrayList<String>)getList.ageList()); 
     return "ApplicationForm"; 
    } 

    @RequestMapping(value="/ApplicaitonForm.html",method=RequestMethod.POST) 
    public String displayFormDetails(@Valid UserData data,BindingResult result,ModelMap map,@RequestParam(value="name",required=true) String name,@RequestParam("age") String age){ 

     if(result.hasErrors()){ 
      System.out.println("It has some errors !!!!!!!!"); 
      return "ApplicationForm"; 
     } 
     map.addAttribute("name", name); 
     map.addAttribute("age", age); 

     return "DisplayFormDetails"; 
    } 
} 

ListStore 클래스가 될 것입니다,의 dropdown 목록에있는 값을 복원하는 방법
public class ListStore { 

    public List<String> ageList(){ 
     LinkedList<String> list = new LinkedList<String>(); 
     list.add("20 to 25 years"); 
     list.add("25 to 35 years"); 
     list.add("above 35 years"); 
     return list; 
    } 
} 

때 POST 방법을 통해 내 양식 다시로드 컨트롤러의?

하지만 같은 내 코드에서와 같이 map.addAttribute("age",(ArrayList<String>)getList.ageList());을 추가하여이 문제를 해결,

if(result.hasErrors()){ 
     System.out.println("Form has some errors !!!!!!!!"); 
     map.addAttribute("age",(ArrayList<String>)getList.ageList()); 
     return "ApplicationForm"; 
    } 

그러나 쉽게 할 수있는 다른 방법이?

우리의 스택 구성원이 날 도움이되기를 바랍니다.

답변

1

나는 보통 코드 중복을 피하기 위해 행동 (POST) 방식과 표시 방법을 호출하고 있습니다. 아래에서 약간 수정 된 코드를 확인하십시오. Post/Redirect/Get pattern을 따르기 위해 코드를 약간 변경했습니다. 답장을 보내

@Controller 
public class FormController { 

    private ListStore getList; 

    @RequestMapping(value="/ApplicationForm.html", method=RequestMethod.GET) 
    public String displayForm(@ModelAttribute UserData userData, Model model){ 

     model.addAttribute("age", getList.ageList()); 
     return "ApplicationForm"; 
    } 

    @RequestMapping(value="/ApplicaitonForm.html", method=RequestMethod.POST) 
    public String processForm(@Valid UserData data, 
           BindingResult result, 
           Model model, 
           @RequestParam(value="name", required=true) String name, 
           @RequestParam("age") String age, 
           RedirectAttributes redirectAttributes) { 

     if(result.hasErrors()){ 
      System.out.println("It has some errors !!!!!!!!"); 
      return displayForm(data, model); /* THIS IS THE TRICK :) */ 
     } 

     redirectAttributes.addFlashAttribute("name", name); 
     redirectAttributes.addFlashAttribute("age", age); 

     return "redirect:/DisplayFormDetails.html"; // Redirect here to follow Post/Redirect/Get pattern 
    } 

    @RequestMapping(value="/DisplayFormDetails.html", method=RequestMethod.GET) 
    public String displayFormDetails(Model model){ 
     // name and age are already in model due to use of RedirectAttributes 
     return "DisplayFormDetails"; 
    } 
} 
+0

감사를 통해 컨트롤러에 주입. 그것은 나를 도왔고 잘 작동합니다. 당신을 위해'+ 1' ... –

0

내가

양식에 오류가 다음 단순히보기에 노출 아니오 모델 데이터와 "ApplicationForm"보기 이름을 반환하는 경우가있는보기

if(result.hasErrors()){ 
      System.out.println("It has some errors !!!!!!!!"); 
      return "ApplicationForm"; 
    } 
+0

감사합니다. 나는 오류를 얻었을 때'map.addAttribute ("age", (ArrayList ) getList.ageList());를 다시 한 번 추가하여이 작업을 공동으로 수행 할 수 있습니다. –

+0

나는 당신을 얻지 못했습니다, 지금 작동합니까? – Jayesh

+0

도움이되면 답변으로 느낄 수 있습니다. 해결책을 받아 들일 수 있습니까? – Jayesh

0

추가를 표시 할 것이다, 당신의 코드에서 볼 수 있습니다 @Autowired getList 속성에 대한 주석.

@Controller 
public class FormController { 

    @Autowired //annotation added 
    private ListStore getList; 
    ----- 
+0

안녕하세요 일하는 것이, 나는 이미 Liststore''에 대한 빈을 생성하고 많은 당신을위한'applicationContext.xml' –

0

@ModelAttribute

@ModelAttribute 
    public ModelMap setupForm(ModelMap modelMap) { 

     modelMap.put("age",(ArrayList<String>)getList.ageList()); 
     return modelMap; 
    } 

This is a nice article 스프링 폼 처리에 대한 이해를 돕기 위해.

관련 문제