有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在SpringMVC3.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";
    }

我必须重新创建hashmap,以便每次都放置性感选项,因为它将再次返回到同一页面(index.jsp)?当我从家里回来保存电子邮件时,没有办法保存这个吗


共 (2) 个答案

  1. # 1 楼答案

    “spring方式”是将这两个HashMap声明为实例变量,并将它们连接到应用程序上下文(DI)中——可能将映射存储在属性文件中

  2. # 2 楼答案

    我会将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...
        }
    }