Spring FlashScope

时间:2011-03-17 20:40:12

标签: java data-binding spring-mvc velocity flash-scope

在等待FlashScope被集成到Spring 3.1中时(无论如何它已经安排在这个版本中),我遇到了this bug posting,它允许我在3.1出现后合并一个松散版本的应用程序。< / p>

我的问题是我似乎无法绑定Flash Scope中的值。因此,例如在我的模型中,我有以下代码:

ModelAndView mav = new ModelAndView(someInjectedRedirectPage);
//Processing
mav.addObject("flashScope.someVar", someObject);

在我的UI中,使用Velocity,我尝试以下列方式绑定到此对象:

##This is a velocimacro for those not familiar with velocity.
##It is basically like setting a path on a field utilizing the
##spring tag lib (e.x. <form:text path="flashScope")

#springBind("flashScope") 

但是当我尝试使用该绑定时,我得到以下异常:

java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'flashScope' available as request attribute
at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:141)
at org.springframework.web.servlet.support.RequestContext.getBindStatus(RequestContext.java:720)bean name 'flashScope' available as request attribute...

但是在我的日志中,我可以清楚地说明它已被添加到请求中。我也可以做以下事情:

$flashScope.someVar.someProperty #The value prints fine this way.

无论如何都要绑定到Map值(不在备份命令对象上,而只是在请求上)?

请注意,请执行以下操作:

Map<String, String> map = new HashMap <String, String>(); 
map.put("key", "value");
mav.addObject("map", map);

我仍然无法绑定到地图......

我可以通过扩展WebBindingInitializer来修改这种行为吗?将FlashScopeMap简单地包装到另一个对象中可以解决问题吗?

1 个答案:

答案 0 :(得分:0)

包装到另一个对象是我能够解决此问题的唯一方法。