JSF Managed Beans
JSF 使用 Bean 来达到逻辑层与表现层分离的目的,Bean 的管理集中在组态档案中,您只要修改组态档案,就可以修改 Bean 之间的相依关系。JSF支持配置文件配置bean和注解标注bean两种方式,声明一个受托管的javabean。JSF通过javabean来达到视图与逻辑相分离的目的,每一个javabean不需要继承任何java类,是一个纯粹的pojo对象,这点比struts做的好多了(当然struts2 有所改进)。
JSF将Bean的管理集中在faces-config.xml中,一个例子如下:
....
<managed-bean>
<managed-bean-name>user</managed-bean-name>
<managed-bean-class>
onlyfun.caterpillar.UserBean
</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
....
<managed-bean-scope>设定Bean的生命存活范围,您可以设为request、session 和application(这和JSP有点差别),设为request時,Bean的存活为请求阶段,设为session则在使用应用程序交互开始,直到关闭浏览器或显示的结束会话为止,设为application,則Bean会一直存活到应用关闭为止。
还可以將存活存活范围设为none,当设为none时会在需要的时候生成一新的Bean,例如您在一個method中想要生成一个临时的Bean,就可以将他设定为none。
在bean的声明中可以为其指定属性,JSF在初始化该bean的时候会为其set注入这些属性。除了注入基本属性之外,还可以注入list、map集合属性。
....
<managed-bean>
<managed-bean-name>someBean</managed-bean-name>
<managed-bean-class>
onlyfun.caterpillar.SomeBean
</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>someProperty</property-name>
<list-entries>
<value-class>java.lang.Integer</value-class>
<value>1</value>
<value>2</value>
<value>3</value>
</list-entries>
</managed-property>
</managed-bean>
....
....
<managed-bean>
<description>
Special expense item types
</description>
<managed-bean-name>specialTypes</managed-bean-name>
<managed-bean-class>
java.util.TreeMap
</managed-bean-class>
<managed-bean-scope>application</managed-bean-scope>
<map-entries>
<value-class>java.lang.Integer</value-class>
<map-entry>
<key>Presentation Material</key>
<value>100</value>
</map-entry>
<map-entry>
<key>Software</key>
<value>101</value>
</map-entry>
<map-entry>
<key>Balloons</key>
<value>102</value>
</map-entry>
</map-entries>
</managed-bean>
....