JSF 托管bean(Managed Bean)是JSF注册的常规Java Bean类。托管bean包含getter和setter方法,业务逻辑。JSF托管bean作为UI组件的Model。 它存储JSF xhtml页面使用的数据。借助JSF框架,可以从JSF页面访问托管Bean。
在JSF 1.2中,我们必须在JSF配置文件(如faces-config.xml
)中注册受管理的bean。
从JSF 2.0可以使用注解注册管理bean。
使用XML配置
以下代码显示如何使用JSF管理的bean进行注册 -
<managed-bean>
<managed-bean-name>helloWorld</managed-bean-name>
<managed-bean-class>com.yiibai.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.yiibai.test.Message</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
使用@ManagedBean注解
以下代码显示了如何使用注解来注册JSF托管的bean。
@ManagedBean(name = "helloWorld", eager = true)
@RequestScoped
public class HelloWorld {
@ManagedProperty(value="#{message}")
private Message message;
...
}
@ManagedBean
将bean标识为名称属性中指定的名称的托管bean。如果未指定name
属性,那么托管bean名称将默认为简单的类名称,其中第一个字母小写。 在我们的情况下是helloWorld
。
如果eager
设置为“true
”,则在请求之前创建托管bean。如果使用“lazy
”初始化,只有在请求时才会创建bean。
范围注解
范围注解设置受管Bean的范围。如果未指定范围,则bean将默认为请求范围。
我们可以将JSF bean范围设置为以下列表。
@RequestScoped
bean只要HTTP请求响应就行。它根据HTTP请求创建,并在与HTTP请求相关联的HTTP响应完成时被销毁。@NoneScoped
bean与单个表达式语言(EL)求值时间一样长。 在EL求值评估时创建,并在EL求值评估后被销毁。@ViewScoped
bean只要用户在浏览器窗口中与同一JSF视图进行交互即可。 它根据HTTP请求创建,并在用户导航到其他视图时被销毁。@SessionScoped
bean只要HTTP会话生存。 它在第一个HTTP请求时创建,并在HTTP会话无效时被销毁。@ApplicationScoped
bean只要Web应用程序生存。 它在第一个HTTP请求或Web应用程序启动时创建,并且在@ManagedBean
中设置属性eager = true
,并在Web应用程序关闭时被销毁。@CustomScoped
bean只要在为此范围创建的自定义Map中的bean的条目生效。
@ManagedProperty注释
JSF是一个简单的静态依赖注入(DI)框架。 @ManagedProperty
注释标记被托管的bean的属性以注入另一个受托管的Bean。