Java 如何在SpringMVC中使用转发处理控制器之间的ModelMap的有效方法
在SpringMVC3.2中,最优雅/有效的方法是什么,如何处理控制器之间的模型。为了重定向到另一个控制器,我使用forward方法,所以不需要新的请求实例,模型数据应该是可访问的(如果我没有错的话)。是否有任何方法可以捕获添加到第一个控制器中的模型 (我知道重定向属性,但可能是更好/更简单的方法) 例如:Java 如何在SpringMVC中使用转发处理控制器之间的ModelMap的有效方法,java,spring,spring-mvc,model-view-controller,Java,Spring,Spring Mvc,Model View Controller,在SpringMVC3.2中,最优雅/有效的方法是什么,如何处理控制器之间的模型。为了重定向到另一个控制器,我使用forward方法,所以不需要新的请求实例,模型数据应该是可访问的(如果我没有错的话)。是否有任何方法可以捕获添加到第一个控制器中的模型 (我知道重定向属性,但可能是更好/更简单的方法) 例如: @Controller public class WebpageController{ @RequestMapping( value = { "/{code}" } )
@Controller
public class WebpageController{
@RequestMapping( value = { "/{code}" } )
public String handleFirstLevel(@PathVariable String code, ModelMap modelMap) throws PageNotFoundEception{
final Webpage webpage = getWebpage(code);
modelMap.put(WEBPAGE_MODEL_KEY, prepareModel(webpage));
return "forward:some-url";
}
private Map<String, Object> prepareModel(Webpage webpage){
Map<String, Object> model = new HashMap<String, Object>();
model.put("webpage", webpage);
return model;
}
// some other code
}
@Controller
public class SpecialWebpageController{
@RequestMapping( value = { "/some-url" } )
public String handleFirstLevel(@PathVariable String code, ModelMap modelMap) throws PageNotFoundEception{
// need access to previously appended model to add some other data
return "specialViewName";
}
}
@控制器
公共类网页控制器{
@请求映射(值={”/{code}})
公共字符串handleFirstLevel(@PathVariable字符串代码,ModelMap ModelMap)抛出PageNotFoundEception{
最终网页网页=获取网页(代码);
modelMap.put(WEBPAGE_MODEL_KEY,prepareModel(WEBPAGE));
返回“转发:某个url”;
}
私有地图prepareModel(网页){
映射模型=新的HashMap();
模型放置(“网页”,网页);
收益模型;
}
//其他代码
}
@控制器
公共类SpecialWebpageController{
@RequestMapping(值={“/某些url”})
公共字符串handleFirstLevel(@PathVariable字符串代码,ModelMap ModelMap)抛出PageNotFoundEception{
//需要访问先前附加的模型以添加其他数据
返回“specialViewName”;
}
}
谢谢当您有一个只返回
字符串
的处理程序方法时,字符串
被视为视图名称。使用前缀forward
,Spring将获得指定路径的RequestDispatcher
,并转发到该路径。该过程的一部分将包括从为该请求处理周期创建的模型和视图中获取模型
,并将其所有属性放入HttpServletRequest
属性中
Servlet容器将把RequestDispatcher向前(..)
并再次使用DispatcherServlet
来处理它。您的DispatcherServlet
将为此处理周期创建一个新的模型和视图
,其中包含一个新的模型
。因此,此模型
不包含以前的任何属性,但是HttpServletRequest
属性包含这些属性
就你而言,这个
modelMap.put(WEBPAGE_MODEL_KEY, prepareModel(webpage));
最终会被判入狱
HttpServletRequest request = ...;
request.getAttribute(WEBPAGE_MODEL_KEY);
如果处理程序方法只返回一个字符串
,则该字符串
将被视为视图名称。使用前缀forward
,Spring将获得指定路径的RequestDispatcher
,并转发到该路径。该过程的一部分将包括从为该请求处理周期创建的模型和视图中获取模型
,并将其所有属性放入HttpServletRequest
属性中
Servlet容器将把RequestDispatcher向前(..)
并再次使用DispatcherServlet
来处理它。您的DispatcherServlet
将为此处理周期创建一个新的模型和视图
,其中包含一个新的模型
。因此,此模型
不包含以前的任何属性,但是HttpServletRequest
属性包含这些属性
就你而言,这个
modelMap.put(WEBPAGE_MODEL_KEY, prepareModel(webpage));
最终会被判入狱
HttpServletRequest request = ...;
request.getAttribute(WEBPAGE_MODEL_KEY);
转发:
将内部资源视图
转发到容器,因此我不确定转发到控制器是什么意思。转发:
将内部资源视图
转发到容器,所以我不确定转发到控制器是什么意思。