新彩天欢迎您!
幻海优品

JSF - Managed Beans

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配置

<managed-bean>   <managed-bean-name>helloWorld</managed-bean-name>   <managed-bean-class>com.IT屋.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.IT屋.test.Message</managed-bean-class>   <managed-bean-scope>request</managed-bean-scope></managed-bean>

使用注释

@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

<!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  -  Create Application章节中那样编译并运行应用程序.如果您的应用程序一切正常,这将产生以下结果.

JSF Managed Beans

免责声明:以上内容(如有图片或视频亦包括在内)有转载其他网站资源,如有侵权请联系删除