JSF 托管 Bean基础教程文档

收录于 2023-04-20 00:10:05 · بالعربية · English · Español · हिंदीName · 日本語 · Русский язык · 中文繁體

Managed Bean 是在 JSF 中注册的常规 Java Bean 类。换句话说,Managed Beans 是由 JSF 框架管理的 Java bean。托管 bean 包含 getter 和 setter 方法、业务逻辑,甚至一个支持 bean(一个 bean 包含所有 HTML 表单值)。
托管 bean 用作 UI 组件的模型。可以从 JSF 页面访问托管 Bean。
JSF 1.2 中,托管 bean 必须在 JSF 配置文件(例如 facesconfig.xml)中注册它。从 JSF 2.0 开始,可以使用注释轻松注册托管 bean。这种方法将 bean 及其注册保存在一个地方,因此更易于管理。

使用 XML 配置

<managed-bean>
   <managed-bean-name>helloWorld</managed-bean-name>
   <managed-bean-class>com.tutorialspoint.test.HelloWorld</managed-bean-class>
   <managed-bean-scope>request</managed-bean-scope>
</managed-bean> 
<managed-bean>
   <managed-bean-name>message</managed-bean-name>
   <managed-bean-class>com.tutorialspoint.test.Message</managed-bean-class>
   <managed-bean-scope>request</managed-bean-scope>
</managed-bean> 

使用注解

@ManagedBean(name = "helloWorld", eager = true)
@RequestScoped
public class HelloWorld {
   @ManagedProperty(value = "#{message}")
   private Message message;
   ...
}

@ManagedBean 注解

@ManagedBean 使用 name 属性中指定的名称将 bean 标记为托管 bean。如果未指定 name 属性,则托管 bean 名称将默认为完全限定类名称的类名称部分。在我们的例子中,它将是 helloWorld。
另一个重要的属性是 渴望。如果eager = "true",则在第一次请求之前创建托管bean,否则使用"lazy"初始化,其中bean将仅在请求时创建。

范围注释

范围注释设置托管 bean 将被放置到的范围。如果未指定范围,则 bean 将默认为请求范围。下表简要讨论了每个范围。
S.No 范围和描述
1
@RequestScoped
Bean 与 HTTP 请求-响应存在的时间一样长。它根据 HTTP 请求创建,并在与 HTTP 请求关联的 HTTP 响应完成时销毁。
2
@NoneScoped
Bean 与单个 EL 评估一样长。它在 EL 评估时创建,并在 EL 评估后立即销毁。
3
@ViewScoped
只要用户在浏览器窗口/选项卡中与同一个 JSF 视图交互,Bean 就会存在。它根据 HTTP 请求创建,并在用户回发到不同视图时销毁。
4
@SessionScoped
Bean 的生命周期与 HTTP 会话的生命周期一样长。它在会话中第一个涉及此 bean 的 HTTP 请求时创建,并在 HTTP 会话无效时销毁。
5
@ApplicationScoped
Bean 的生命周期与 Web 应用程序的生命周期一样长。它在应用程序中涉及此 bean 的第一个 HTTP 请求时创建(或者当 Web 应用程序启动并且在@ManagedBean 中设置了eager=true 属性时)并在 Web 应用程序关闭时销毁。
td>
6
@CustomScoped
Bean 的生命周期与自定义 Map 中 bean 条目的生命周期一样长,为该范围创建。

@ManagedProperty 注释

JSF 是一个简单的静态依赖注入 (DI) 框架。使用 @ManagedProperty 注释,可以将托管 bean 的属性注入另一个托管 bean。

示例应用

让我们创建一个测试 JSF 应用程序来测试托管 bean 的上述注释。
步骤 描述
1 com.tutorialspoint.test 包下创建一个名为helloworld 的项目,如JSF-创建应用程序 章节所述。
2 修改HelloWorld.java,如下所述。保持其余文件不变。
3 在包 com.tutorialspoint.test 下创建 Message.java,如下所述。
4 编译并运行应用程序以确保业务逻辑按照要求工作。
5 最后,以war文件的形式构建应用,并部署到Apache Tomcat Webserver中。
6 使用适当的 URL 启动您的 Web 应用程序,如下面最后一步所述。

HelloWorld.java

package com.tutorialspoint.test;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
@ManagedBean(name = "helloWorld", eager = true)
@RequestScoped
public class HelloWorld {
   @ManagedProperty(value = "#{message}")
   private Message messageBean;
   private String message;
   
   public HelloWorld() {
      System.out.println("HelloWorld started!");   
   }
   
   public String getMessage() {
      
      if(messageBean != null) {
         message = messageBean.getMessage();
      }       
      return message;
   }
   
   public void setMessageBean(Message message) {
      this.messageBean = message;
   }
}

Message.java

package com.tutorialspoint.test;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
@ManagedBean(name = "message", eager = true)
@RequestScoped
public class Message {
   private String message = "Hello World!";
	
   public String getMessage() {
      return message;
   }
   public void setMessage(String message) {
      this.message = message;
   }
}

home.xhtml

<!DOCTYPE html public "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns = "http://www.w3.org/1999/xhtml">
   <head>
      <title>JSF Tutorial!</title>
   </head>
   
   <body>
      #{helloWorld.message}
   </body>
</html>
一旦您准备好完成所有更改,让我们像在 JSF-创建应用程序一章中一样编译和运行应用程序。如果您的应用程序一切正常,这将产生以下结果。
JSF 托管 Beans