===@Model注解的用途 @Model注解做了如下的事情:
使bean擁有request-scoped周期范圍(取代默認的@dependent)給bean一個EL命名
創建一個請求范圍並且賦予命名的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; } }
現在這個bean可以在JSF視圖中使用了:
<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應用中。