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