//$Id: DataModel.java 2169 2006-10-10 03:48:19Z gavin $ package org.jboss.seam.annotations.datamodel; import static java.lang.annotation.ElementType.FIELD; import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.RetentionPolicy.RUNTIME; import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.Target; import org.jboss.seam.ScopeType; import org.jboss.seam.annotations.DataBinderClass; import org.jboss.seam.databinding.DataModelBinder; /** * Outjects a collection to the same scope as the owning component * (or to the EVENT scope in the case of a stateless component), * after wrapping as a JSF DataModel (a List as a ListDataModel, a * Map as a MapDataModel, a Set as a SetDataModel, an array as an * ArrayDataModel). Note that the List, Map, Set or array * will be re-wrapped and re-outjected each time the current * component value is different to the value held by the * context variable as determined by calling equals() on the * underlying collection. * * @author Gavin King * * @see org.jboss.seam.jsf.ListDataModel * @see org.jboss.seam.jsf.MapDataModel * @see org.jboss.seam.jsf.SetDataModel * @see org.jboss.seam.jsf.ArrayDataModel */ @Target({FIELD, METHOD}) @Retention(RUNTIME) @Documented @DataBinderClass(DataModelBinder.class) public @interface DataModel { /** * The context variable name. Defaults to the name of * the annotated field or getter method. */ String value() default ""; /** * Specifies the scope to outject the DataModel to. * If no scope is explicitly specified, the scope of * the component with the @DataModel attribute is used. * But if the component scope is STATELESS, the EVENT * scope is used. * * @return ScopeType.UNSPECIFIED or ScopeType.PAGE */ ScopeType scope() default ScopeType.UNSPECIFIED; }