@Model 是 CDI(Contexts and Dependency Injection)提供的內置 Stereotype(原型註解),一次性完成兩件事:
@Dependentimport javax.enterprise.inject.Model;
import javax.inject.Named;
import javax.enterprise.context.RequestScoped;
@Model
public class SampleBean {
private String value;
public String getValue() { return value; }
public void setValue(String value) { this.value = value; }
}
<h:inputText value="#{sampleBean.value}" />
此處 sampleBean 即為類名首字母小寫的默認 EL 名稱(可通過 @Named("customName") 自定義)。
在 Web 應用中,@RequestScoped + @Named 的組合極其高頻。CDI 為此提供 @Model 作為語法糖,減少樣板註解。
@Named
@RequestScoped
@Stereotype
@Target({TYPE, METHOD})
@Retention(RUNTIME)
public @interface Model {}
@Dependent(默認),通過 JSF 輸入設置的值會在請求結束時隨 Bean 銷毀而丟失。@Model 通過 @RequestScoped 確保數據在請求範圍內存活。@Stereotype 元註解標識這是一個「聚合註解」,可被其他註解繼承組合。@Model。