/*
 * Copyright 2002-2007 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.bind.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Annotation that binds a method parameter or method return value
 * to a named model attribute, exposed to a web view. Supported
 * for {@link RequestMapping} annotated handler classes.
 *
 * <p>Can be used to expose command objects to a web view, using
 * specific attribute names, through annotating corresponding
 * parameters of a {@link RequestMapping} annotated handler method).
 *
 * <p>Can also be used to expose reference data to a web view
 * through annotating accessor methods in a controller class which
 * is based on {@link RequestMapping} annotated handler methods,
 * with such accessor methods allowed to have any arguments that
 * {@link RequestMapping} supports for handler methods, returning
 * the model attribute value to expose.
 *
 * @author Juergen Hoeller
 * @since 2.5
 */
@Target({ElementType.PARAMETER, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ModelAttribute {

	/**
	 * The name of the model attribute to bind to.
	 * <p>The default model attribute name is inferred from the declared
	 * attribute type (i.e. the method parameter type or method return type),
	 * based on the non-qualified class name:
	 * e.g. "orderAddress" for class "mypackage.OrderAddress",
	 * or "orderAddressList" for "List&lt;mypackage.OrderAddress&gt;".
	 */
	String value() default "";

}

@@ -20,10 +20,10 @@
 2-20
-07
+12
  the
@@ -867,16 +867,54 @@
 arget;%0A%0A
+import org.springframework.ui.Model;%0A%0A
 /**%0A * A
@@ -1051,55 +1051,80 @@
 for 
-%7B@link RequestMapping%7D annotated handler classe
+controller classes with %7B@link RequestMapping @RequestMapping%7D%0A * method
 s.%0A 
@@ -1270,16 +1270,17 @@
 ers of a
+n
  %7B@link 
@@ -1297,35 +1297,32 @@
 ping
-%7D annotated handler
+ @RequestMapping%7D
  method
-)
 .%0A *
@@ -1450,27 +1450,14 @@
 ss w
-hic
+it
 h%0A *
- is based on
  %7B@l
@@ -1478,46 +1478,36 @@
 ping
-%7D annotated handler methods,%0A * with s
+ @RequestMapping%7D methods. S
 uch 
@@ -1506,32 +1506,35 @@
 s. Such accessor
+%0A *
  methods allowed
@@ -1526,16 +1526,20 @@
 methods 
+are 
 allowed 
@@ -1593,88 +1593,472 @@
 ping
-%7D supports fo
+ @RequestMapping%7D methods support, returning%0A * the model attribute value to expose.%0A *%0A * %3Cp%3ENote howeve
 r 
+t
 ha
-ndler methods, returning%0A * the model attribute value to expose
+t reference data and all other model content is%0A * not available to web views when request processing results in an%0A * %7B@code Exception%7D since the exception could be raised at any time%0A * making the content of the model unreliable. For this reason%0A * %7B@link ExceptionHandler @ExceptionHandler%7D methods do not provide%0A * access to a %7B@link Model%7D argument
 .%0A *

Update @ModelAttribute javadoc