===@Model注解的用途 @Model注解做了如下的事情:
創建一個請求范圍并且賦予命名的bean,就像一個標注有@RequestScoped和@Named的類,自從這樣的注解組合頻繁的出現在Web應用中,CDI就提供了內建的注解@Model方便使用。
//@Model例子
@Model public class SampleBean {
private String value;
public String getValue() {
return value;
}
public String setValue(String value) {
this.value = value;
}
}
<h:inputText value="#{sampleBean.value}"/>
通常如果你想在JSF頁面中通過EL命名訪問bean,你可能需要給類標注@Dependent注解。否則,任何通過JSF input設置的值都會立即失效。這樣是為什么CDI提供了@Model類型;它讓你給bean一個命名,并且一舉設置bean的周期為@RequestScoped。如果你確實在@dependent周期里通過JSF頁面中訪問一個bean,注入一個不同的bean,通過getter方法來保留給EL。
一個stereotype是用來聚合其它注解的注解。@Model是一個CDI內置stereotype,定義如下:
@Named @RequestScoped @Stereotype @Target({TYPE, METHOD}) @Retention(RUNTIME) public @interface Model {}
@Modelstereotype注解應該頻繁的應用在web應用中。