java - Spring MVC 表单 - 下拉列表中没有项目?

标签 java spring jsp spring-mvc spring-annotations

我的表格有一个 text field和一个dropdown list .当我的表格第一次加载时有一个list of values in the dropdown list .

如果我提交 form ,我的表格有任何 errors ,我正在尝试返回相同的表单以显示错误并重新提交丢失的数据。

但是如果我的表格 reloads通过 POST controller的方法| , 下拉列表中没有值。

我的 Spring 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 类将是,

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;
    }
 }

如何恢复 dropdown 中的值列表,当我的表单通过 Controller 的 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";
    }

但是有没有其他方法可以轻松做到这一点?

希望我们的堆栈成员能帮助我。

最佳答案

我通常从操作 (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";
    }
}

关于java - Spring MVC 表单 - 下拉列表中没有项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17837971/

相关文章:

java - 自动生成的邮件

java - Google App Engine - 如何将对象返回到我的 servlet?

Java:Cipher包(加密和解密)。无效 key 错误

java - RabbitMQ、docker、单队列、多个消费者

java - 堆转储与可视化虚拟机中的内存分析

java - 带长轮询的 Spring REST

java - 我怎样才能干净地关闭 Spring Rabbit 中的 RabbitTemplate?

java - Spring Boot 在提供 JSP 内容时无限期挂起

java - 如何在java中从src播放声音文件

java - 如何用类制作Java包