我用的spring mvc开发的值钱项目使用的ModelAndView的方式返回的参数,和映射地址!
现在开发使用了spring 2.5用上了批注!返回值的传递用ModelMap。
为何原来的ModelAndView 支持addObject,但是ModelMap的这个方法就花了个横杠?
我知道是过期的意思,但是我想知道处于何目的!
(以后要是遇到同样问题如何去找,答案,希望深入了解下!)
[b]问题补充:[/b]
确实有,希望有人能解答一下!
读了下源代码,确实没有.
不知道你的spring到底是哪个版本.
下面是2.5.6的ModelAndView的代码:
/*
- Copyright 2002-2006 the original author or authors. *
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at *
- http://www.apache.org/licenses/LICENSE-2.0 *
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License. */
package org.springframework.web.servlet;
import java.util.Map;
import org.springframework.ui.ModelMap;
/**
- Holder for both Model and View in the web MVC framework.
- Note that these are entirely distinct. This class merely holds
- both to make it possible for a controller to return both model
- and view in a single return value. *
Represents a model and view returned by a handler, to be resolved
- by a DispatcherServlet. The view can take the form of a String
- view name which will need to be resolved by a ViewResolver object;
- alternatively a View object can be specified directly. The model
- is a Map, allowing the use of multiple objects keyed by name. *
- @author Rod Johnson
- @author Juergen Hoeller
- @author Rob Harrop
- @see DispatcherServlet
- @see ViewResolver
- @see HandlerAdapter#handle
@see org.springframework.web.servlet.mvc.Controller#handleRequest
*/
public class ModelAndView {
/** View instance or view name String */
private Object view;
/** Model Map */
private ModelMap model;
/**
- Indicates whether or not this instance has been cleared with a call to {@link #clear()}. */ private boolean cleared;
/**
- Default constructor for bean-style usage: populating bean
- properties instead of passing in constructor arguments.
- @see #setView(View)
- @see #setViewName(String) */ public ModelAndView() { }
/**
- Convenient constructor when there is no model data to expose.
- Can also be used in conjunction with
addObject
. - @param viewName name of the View to render, to be resolved
- by the DispatcherServlet's ViewResolver
- @see #addObject */ public ModelAndView(String viewName) { this.view = viewName; }
/**
- Convenient constructor when there is no model data to expose.
- Can also be used in conjunction with
addObject
. - @param view View object to render
- @see #addObject */ public ModelAndView(View view) { this.view = view; }
/**
- Creates new ModelAndView given a view name and a model.
- @param viewName name of the View to render, to be resolved
- by the DispatcherServlet's ViewResolver
- @param model Map of model names (Strings) to model objects
- (Objects). Model entries may not be
null
, but the - model Map may be
null
if there is no model data. */ public ModelAndView(String viewName, Map model) { this.view = viewName; if (model != null) { getModelMap().addAllAttributes(model); } }
/**
- Creates new ModelAndView given a View object and a model.
- Note: the supplied model data is copied into the internal
- storage of this class. You should not consider to modify the supplied
- Map after supplying it to this class
- @param view View object to render
- @param model Map of model names (Strings) to model objects
- (Objects). Model entries may not be
null
, but the - model Map may be
null
if there is no model data. */ public ModelAndView(View view, Map model) { this.view = view; if (model != null) { getModelMap().addAllAttributes(model); } }
/**
- Convenient constructor to take a single model object.
- @param viewName name of the View to render, to be resolved
- by the DispatcherServlet's ViewResolver
- @param modelName name of the single entry in the model
- @param modelObject the single model object */ public ModelAndView(String viewName, String modelName, Object modelObject) { this.view = viewName; addObject(modelName, modelObject); }
/**
- Convenient constructor to take a single model object.
- @param view View object to render
- @param modelName name of the single entry in the model
- @param modelObject the single model object */ public ModelAndView(View view, String modelName, Object modelObject) { this.view = view; addObject(modelName, modelObject); }
/**
- Set a view name for this ModelAndView, to be resolved by the
- DispatcherServlet via a ViewResolver. Will override any
- pre-existing view name or View. */ public void setViewName(String viewName) { this.view = viewName; }
/**
- Return the view name to be resolved by the DispatcherServlet
- via a ViewResolver, or
null
if we are using a View object. */ public String getViewName() { return (this.view instanceof String ? (String) this.view : null); }
/**
- Set a View object for this ModelAndView. Will override any
- pre-existing view name or View. */ public void setView(View view) { this.view = view; }
/**
- Return the View object, or
null
if we are using a view name - to be resolved by the DispatcherServlet via a ViewResolver. */ public View getView() { return (this.view instanceof View ? (View) this.view : null); }
/**
- Indicate whether or not this
ModelAndView
has a view, either - as a view name or as a direct {@link View} instance. */ public boolean hasView() { return (this.view != null); }
/**
- Return whether we use a view reference, i.e.
true
- if the view has been specified via a name to be resolved by the
- DispatcherServlet via a ViewResolver. */ public boolean isReference() { return (this.view instanceof String); }
/**
- Return the model map. May return
null
. - Called by DispatcherServlet for evaluation of the model. */ protected Map getModelInternal() { return this.model; }
/**
- Return the underlying
ModelMap
instance (never null
). */ public ModelMap getModelMap() { if (this.model == null) { this.model = new ModelMap(); } return this.model; }
/**
- Return the model map. Never returns
null
. - To be called by application code for modifying the model. */ public Map getModel() { return getModelMap(); }
/**
- Add an attribute to the model.
- @param attributeName name of the object to add to the model
- @param attributeValue object to add to the model (never
null
) - @see ModelMap#addAttribute(String, Object)
- @see #getModelMap() */ public ModelAndView addObject(String attributeName, Object attributeValue) { getModelMap().addAttribute(attributeName, attributeValue); return this; }
/**
- Add an attribute to the model using parameter name generation.
- @param attributeValue the object to add to the model (never
null
) - @see ModelMap#addAttribute(Object)
- @see #getModelMap() */ public ModelAndView addObject(Object attributeValue) { getModelMap().addAttribute(attributeValue); return this; }
/**
- Add all attributes contained in the provided Map to the model.
- @param modelMap a Map of attributeName -> attributeValue pairs
- @see ModelMap#addAllAttributes(Map)
- @see #getModelMap() */ public ModelAndView addAllObjects(Map modelMap) { getModelMap().addAllAttributes(modelMap); return this; }
/**
/**
- Return whether this ModelAndView object is empty
- i.e. whether it does not hold any view and does not contain a model. */ public boolean isEmpty() { return (this.view == null && this.model == null); }
/**
- Return whether this ModelAndView object is empty as a result of a call to {@link #clear}
- i.e. whether it does not hold any view and does not contain a model.
- Returns
false
if any additional state was added to the instance - after the call to {@link #clear}.
- @see #clear() */ public boolean wasCleared() { return (this.cleared && isEmpty()); }
/**
- Return diagnostic information about this model and view. */ public String toString() { StringBuffer buf = new StringBuffer("ModelAndView: "); if (isReference()) { buf.append("reference to view with name '").append(this.view).append("'"); } else { buf.append("materialized View is [").append(this.view).append(']'); } buf.append("; model is ").append(this.model); return buf.toString(); } }
可以去参考spring2.5的javadoc.
http://static.springframework.org/spring/docs/2.5.x/api/
不过从javadoc上我没有发现你说的过期.