LiteBean的声明在OperaMasks中是非常简单的一件事情,只需要一个@ManagedBean 的 annotation声明即可。一个比较完整的LiteBean声明如下:
@ManagedBean(name="LiteBean", scope=ManagedBeanScope.NONE,
description="The description",displayName="your_display_name")
public class LiteBean {
}其中,如果不指定name,那么,默认以类名称(不含包名)作为name,scope的默认值为none,description及displayName基本上都可以忽略。
所以,一个更简单的LiteBean的声明是:
@ManagedBean
public class LiteBean {
}由于LiteBean是被容器自动创建的,因此,很自然的,LiteBean必须要有个无参数的构造函数。有的同学要问了:“有时候通过无参数的构造器进行LiteBean 的创建方式不能够完全满足我的要求,因为在某些场景下,我需要知道一些上下文,才能够正确的创建并初始化一个LiteBean,这种情况如何解决?” 这种情况下,你可以通过Factory模式来创建LiteBean,如下所示:
@ManagedBean(scope=ManagedBeanScope.APPLICATION)
public class UserFactory {
@Factory(name="user",scope=ManagedBeanScope.SESSION)
public User createUser() {
return new User();
}
}请注意,这个Factory本身也必须要是个LiteBean。
LiteBean被声明以后,就能够被EL表达式所引用了,但如果你要访问LiteBean的属性,那么,你还要为该属性准备getter/setter 方法。笔者并不认为 getter/setter方法存在什么问题,但事实上,某些场景下,getter/setter方法过多,确实会影响到开发者的注意力,因此,OperaMasks中又引入了一个@ManagedProperty的annotation,如果在一个属性上进行@ManagedProperty的注解,那么,这个属性就成为“Managed Property”,并可以被EL表达式引用,如:
@ManagedBean public class LiteBean {
@ManagedProperty
private String name;
}此时,你可以通过#{LiteBean.name}引用这个变量。但 @ManagedProperty的作用并不仅限于此,你还可以在该声明中指定一个EL表达式,该EL表达式的值,将作为该属性的初始化值,如:
@ManagedBean public class LiteBean {
@ManagedProperty("#{OtherLiteBean.someProperty}")
private String name;
}基本上,我们从来不需要再维护faces-config.xml,但我们也不排斥通过 faces-config.xml来进行 ManagedBean/ManagedProperty的声明。
此外需要提醒读者注意的是,如果在@ManagedProperty中通过EL表达式引入别的 LiteBean,需要注意LiteBean的生命周期,下面就让我们来介绍一下什么是 LiteBean的生命周期。