繁体   English   中英

如何在Spring MVC 3.1中保存状态?

[英]how to save state in spring mvc 3.1?

我不知道这是否是“保存状态”一词,但是如果我的控制器中有此方法:

@RequestMapping(value = "/", method = RequestMethod.GET)
    public String home(Locale locale, Model model, HttpServletRequest request) {
        Date date = new Date();
        DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
        String formattedDate = dateFormat.format(date);
        model.addAttribute("serverTime", formattedDate );
        model.addAttribute("email", new Email());
        model.addAttribute("imgBg", getRandomBg(request.getRemoteHost()));
        Map sexoOpts = new HashMap();
        sexoOpts.put("M", "homem");
        sexoOpts.put("F", "mulher");

        Map sexoOpts2 = new HashMap();
        sexoOpts2.put("M", "Busco por homens");
        sexoOpts2.put("F", "Busco por mulheres");

        model.addAttribute("sexoList1", sexoOpts);
        model.addAttribute("sexoList2", sexoOpts2);
        return "index";
    }

而在其他方法中,我有:

@RequestMapping(value = "/save-email", method = RequestMethod.POST)
    public String doSaveEmail(@Valid @ModelAttribute("email") Email email,BindingResult result, Model model, HttpServletRequest request){
        model.addAttribute("imgBg", getRandomBg(request.getLocalAddr()));
        Map sexoOpts = new HashMap();
        sexoOpts.put("M", "homem");
        sexoOpts.put("F", "mulher");

        Map sexoOpts2 = new HashMap();
        sexoOpts2.put("M", "Busco por homens");
        sexoOpts2.put("F", "Busco por mulheres");

        model.addAttribute("sexoList1", sexoOpts);
        model.addAttribute("sexoList2", sexoOpts2);

        if (result.hasErrors()){
            return "index";
        }
        Date date = new Date();
        email.setCreationDate(date);

        boolean saved = false;
        try{
            saved = emailBo.saveEmail(email);
        }catch(Exception e){
            e.printStackTrace();
        }
        model.addAttribute("email", new Email());
        if (saved){
            model.addAttribute("saveStatus", "ok");
        }else{
            model.addAttribute("saveStatus", "false");
        }


        return "index";
    }

我必须重新创建哈希图以每次都添加性感选项,因为它会再次返回到同一页面(index.jsp)? 当我从家到保存电子邮件并返回时,没有保存此方法的方法吗?

我会将Map保存为常量,这样它就位于方法的外部,但仍可以从内部引用。

public class MyController {
    private static Map sexoOpts = new HashMap();
    private static Map sexoOpts2 = new HashMap();

    static {
        sexoOpts.put("M", "homem");
        sexoOpts.put("F", "mulher");
        sexoOpts2.put("M", "Busco por homens");
        sexoOpts2.put("F", "Busco por mulheres");
    }

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String home(Locale locale, Model model, HttpServletRequest request) {
        //I have access to sexoOpts and sexoOpts2, so there is no
        //need to instantiate them in here anymore...
    }

    @RequestMapping(value = "/save-email", method = RequestMethod.POST)
    public String doSaveEmail(@Valid @ModelAttribute("email") Email email,BindingResult result, Model model, HttpServletRequest request){
        //I have access to sexoOpts and sexoOpts2, so there is no
        //need to instantiate them in here anymore...
    }
}

“春天的方式”是将两个哈希图声明为实例变量,并将其连接到您的应用程序上下文(DI)中-可能将映射存储在属性文件中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM