LiteBean的声明

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的生命周期。

[上一页] [下一页]