Flash属性和ResourceBundleViewResolver

时间:2014-02-08 06:38:32

标签: spring

我遇到了flash属性的问题,我无法在POST / redirect / GET场景的GET阶段检索它。这只发生在我使用ResourceBundleViewResolver时。

查看解析器

<bean class="org.springframework.web.servlet.view.ResourceBundleViewResolver"> 
    <property name="basename" value="spring-views" /> </bean>

查看属性

form.(class)=org.springframework.web.servlet.view.JstlView
form.url=/WEB-INF/pages/form.jsp

home.(class)=org.springframework.web.servlet.view.JstlView
home.url=/WEB-INF/pages/home.jsp

home_redirect.(class)=org.springframework.web.servlet.view.RedirectView
home_redirect.url=home

form.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>


    <form action="register" method="post">
       Name:   <input type="text" name="name"/> <br/>

       <input type="submit" value="Submit"/>
    </form>

</body>
</html>

针对home.jsp

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<html>
<body>

   <h2>  ${status} </h2>

</body>
</html>

所以在这个页面home.jsp中,状态应该包含设置为flash属性的值。

控制器

@Controller
public class WebController {


    @RequestMapping(value="/form", method=RequestMethod.GET)
    public String showFormPage(){
        return "form";
    }

    @RequestMapping(value="/register", method=RequestMethod.POST)
    public ModelAndView login(@RequestParam("name") String name, RedirectAttributes flashMap){
        System.out.println("name = " + name);
        flashMap.addFlashAttribute("status", "Registered successfully");        
        //return new RedirectView("home"); -- with this returned its working 
        return new ModelAndView("home_redirect");  //-- with this returned its not working 
        //return "redirect:home"; // -- not working
    }


    @RequestMapping(value="/home")  
    public String showHomePage(){
        return "home";
    }
}

总的来说这是观察:

如果使用资源包视图解析器

  1. 将视图名称返回为字符串 - 不工作
  2. 返回ModelAndView - 无法正常工作
  3. 返回RedirectAndView - 工作
  4. 如果使用内部视图解析器

    1. 将视图名称返回为字符串 - 工作 2返回modelandview - 不能用于重定向
    2. 返回RedirectAndView - 工作

0 个答案:

没有答案