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