开发手册 欢迎您!
软件开发者资料库

JSF - Managed Beans

JSF Managed Beans - 从基本到高级概念的简单简单步骤学习Java Server Faces(JSF),其中包括概述,环境设置,体系结构,生命周期,第一个应用程序,托管Bean,页面导航,事件处理,Ajax,Basic标签,Facelets标签,转换器标签,验证标签,数据表,复合组件,JDBC集成,Spring集成,表达式语言和国际化。

Managed Bean是在JSF中注册的常规Java Bean类.换句话说,Managed Beans是由JSF框架管理的Java bean.托管bean包含getter和setter方法,业务逻辑,甚至是一个支持bean(bean包含所有HTML表单值).

托管bean作为UI组件的模型.可以从JSF页面访问Managed Bean.

JSF 1.2 中,托管bean必须在JSF配置文件(例如facesconfig.xml)中注册它.从 JSF 2.0 开始,可以使用注释轻松注册托管bean.这种方法可以将bean及其注册保存在一个地方,因此管理变得更容易.

使用XML配置

   helloWorld   com.IT屋.test.HelloWorld   request    message   com.IT屋.test.Message   request

使用注释

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

@ManagedBean Annotation

@ManagedBean 将bean标记为托管bean,其名称在name属性中指定.如果未指定name属性,则托管bean名称将默认为完全限定类名的类名部分.在我们的例子中,它将是helloWorld.

另一个重要的属性是渴望.如果eager ="true",则在第一次请求之前创建托管bean,否则将使用"延迟"初始化,只有在请求时才会创建bean.

范围注释

范围注释设置托管bean的放置范围.如果未指定范围,则bean将默认为请求范围.每个范围在下表中简要讨论.

S.No范围&描述
1

@RequestScoped

只要HTTP请求响应存在,Bean就会存在.它是在HTTP请求时创建的,并在与HTTP请求关联的HTTP响应完成后被销毁.

2

@NoneScoped


只要进行一次EL评估,Bean就会存在.它是在EL评估时创建的,并在EL评估后立即销毁.
3

@ViewScoped

Bean生活为只要用户在浏览器窗口/选项卡中与相同的JSF视图进行交互.它是在HTTP请求时创建的,一旦用户回发到另一个视图就会被销毁.

4

@SessionScoped

只要HTTP会话存在,Bean就会存在.它在会话中涉及此bean的第一个HTTP请求时创建,并在HTTP会话失效时被销毁.

5

@ApplicationScoped

只要Web应用程序存在,Bean就会存在.它是在应用程序中涉及此bean的第一个HTTP请求时创建的(或者当Web应用程序启动并且@ManagedBean中设置了eager = true属性时),并在Web应用程序关闭时被销毁.

6

@CustomScoped

只要在为此范围创建的自定义Map中的bean条目存在,Bean就会存在.

@ManagedProperty Annotation

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

示例应用程序

让我们创建一个测试JSF应用程序来测试托管bean的上述注释.

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

HelloWorld.java

package com.it1352.test; import javax.faces.bean.ManagedBean;import javax.faces.bean.ManagedProperty;import javax.faces.bean.RequestScoped;@ManagedBean(name = "helloWorld", eager = true)@RequestScopedpublic 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.it1352.test; import javax.faces.bean.ManagedBean;import javax.faces.bean.RequestScoped;@ManagedBean(name = "message", eager = true)@RequestScopedpublic class Message {   private String message = "Hello World!";   public String getMessage() {      return message;   }   public void setMessage(String message) {      this.message = message;   }}

home.xhtml

         JSF Tutorial!               #{helloWorld.message}   

完成所有更改之后,让我们像在JSF  -  Create Application章节中那样编译并运行应用程序.如果您的应用程序一切正常,这将产生以下结果.

JSF Managed Beans