Series JSF – Phần 3: Managed Beans, Bean trong JSF, Các scope trong JSF

Series JSF – Phần 3: Managed Beans, Bean trong JSF, Các scope trong JSF

1. Managed Bean trong JSF

Managed Bean: là các Java Bean được đăng ký với JSF. Nói cách khác, Managed Bean là Java Bean quản lý bởi JSF Framework.

Managed bean thường thực hiện các chức năng chính sau:

  • Validate dữ liệu của component
  • Xử lý các sự kiện gửi tới bởi component
  • Thực thi tiến trình để xác định trang tiếp theo mà ứng dụng phải điều hướng tới.

 

Managed Bean có thể được truy cập từ JSF page.

Ví dụ: JSF Manage bean

public class User {
  private String name;

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }
}

Có 2 cách để xử dụng bean:

Cách 1: Cấu hình managed bean bên trong file xml

<managed-bean>
  <managed-bean-name>user</managed-bean-name>
  <managed-bean-class>User</managed-bean-class>
  <managed-bean-scope>session</managed-bean-scope>
</managed-bean>

Cách 2: Dùng annotation.

@ManagedBean // Using ManagedBean annotation
@RequestScoped // Using Scope annotation
public class User {
  private String name;

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }
}

Annotation @ManagedBean đánh dấu đây là bean được quản lý bởi JSF.

2. Các scope trong JSF

Khi nói tới Scope trong JSF có nghĩa là ta đang nói đến scope của các managed bean.

Trong JSF có 6 Scope cho các bean:

  • Application (@ApplicationScoped): Bean tồn tại trong suốt thời gian hoạt động của ứng dụng web. Nó được tạo khi có một HTTP request đầu tiên gửi tới bean (hoặc lúc ứng dụng web start và thuộc tính eager=true) và chỉ bị mất đi khi ứng dụng web bị shutdown.
  • Session (@SessionScoped): Bean tồn tại tương ứng với HTTP session. Bean được tạo khi có một HTTP request đầu tiên gửi tới bean và bị mất đi khi HTTP Session bị vô hiệu.
  • View (@ViewScoped): Bean tồn tại tương ứng với quá trình giao tiếp với cùng một view của JSF trên cùng 1 brower window/tab. Nó đươc tạo khi có một HTTP request được gửi và bị mất đi khi chuyển tới một view khác.
  • Request (@RequestScoped): Bean tồn tại tương ứng với chu trình HTTP request – reponse. Được tạo khi một request được gửi tới và mất đi khi có một reponse tương ứng trả về.
  • None (@NoneScoped): Biểu thị scope không được định nghĩa, dùng với Expression Language (EL). Được tạo và hủy ngay trước và sau khi sử dụng EL
  • Custom (@CustomScoped): Đây là không phải là một scope chuẩn. Được định nghĩa bởi người dùng. Các bean phải được định nghĩa giống như một java.util.Map.

3. Eager Managed Bean

Mặc định các managed bean là lazy (chỉ được tạo khi có một request gửi đến)

Bạn có thể tạo thể hiện và đặt bean trong aplication scope ngay khi ứng dụng bắt đầu chạy.

ManagedBean(eager=true)

4. @ManagedProperty Annotation

JSF là một Framework Dependency Injection (DI) đơn giản. Với việc sử dụng annotation @ManagedProperty, giá trị của managed bean có thể được inject vào bên trong một bean khác.

Ví dụ:

@ManagedBean
public class UserService {

  public void login(User user) {
    // do something
  }
}

@ManagedBean // Using ManagedBean annotation
@RequestScoped // Using Scope annotation
public class User {
  private String name;
  
  @ManagedProperty
  UserService userService;

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }
}

Ở trong Bean User ta có thể sử dụng bean UserService mà không cần khởi tạo.

 

Bài tiếp theo chúng ta sẽ tiến hành tạo một ứng dụng web bằng JSF

 

stackjava.com