首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java EE 6 中 @Model 注解詳解:RequestScoped 與 Named 的組合

     編輯:Java 相關知識

@Model 的作用

@Model 是 CDI(Contexts and Dependency Injection)提供的內置 Stereotype(原型註解),一次性完成兩件事:

  1. 賦予 Bean 請求作用域(@RequestScoped),替換默認的 @Dependent
  2. 為 Bean 提供 EL 名稱(@Named),可在 JSF 視圖中直接通過表達式訪問

代碼示例

import 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; }
}

JSF 視圖中使用

<h:inputText value="#{sampleBean.value}" />

此處 sampleBean 即為類名首字母小寫的默認 EL 名稱(可通過 @Named("customName") 自定義)。

為什麼需要 @Model?

在 Web 應用中,@RequestScoped + @Named 的組合極其高頻。CDI 為此提供 @Model 作為語法糖,減少樣板註解。

底層定義

@Named
@RequestScoped
@Stereotype
@Target({TYPE, METHOD})
@Retention(RUNTIME)
public @interface Model {}

關鍵點補充

  • @Dependent 作用域陷阱:若 Bean 為 @Dependent(默認),通過 JSF 輸入設置的值會在請求結束時隨 Bean 銷毀而丟失。@Model 通過 @RequestScoped 確保數據在請求範圍內存活。
  • Stereotype 機制:@Stereotype 元註解標識這是一個「聚合註解」,可被其他註解繼承組合。
  • 適用場景:JSF/CDI/Web Beans 開發中,所有需綁定視圖的 Backing Bean 均建議使用 @Model。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved