区别JSF中不同种类的Managed-Bean jsf managebean

JSF拥有一个简单的依赖注入(IoC)容器,称为JSF Managed Bean Facility(MBF)。虽然它具备了详细的XML配置语法,但并不及Spring BeanFactory, PicoContainer, 或JBoss Microcontainer等IoC容器那么壮健。MBF具有一个IoC容器的基本功能,提供了依赖注入等特性。

在JSF MBF的管理之下的POJO通常都被称为Managed-Bean(托管Bean)。但如果你试图创建一个可维护的JSF Web应用(或portlet),你就需要区分开不同种类的Managed-Bean。这种做法同时也保证了在JSF中实现MVC模式的清晰分离概念。

Managed-Bean类型 昵称 典型的有效域
Model Managed-Bean model-bean session

描述: 这种类型的Managed-Bean充当MVC设计模式中的"模型(Model)"部分。当你看到"模型"一词————可以把它想象为"数据"。一个 JSF的model-bean应该是一个遵循JavaBean规范的,以getter/setter方式封装了各种属性的普通JAVA对象。model- bean最常见的使用场景是作为一个数据库实体,或简单地代表了数据库查询结果集中的一系列行数据。

Backing Managed-Bean backing-bean request

描述: 这种类型的Managed-Bean充当MVC设计模式中的"视图(View)"部分。backing-bean的目的是支持UI逻辑,(通常)与一个 JSF视图或Facelet聚合中的JSF表单保持一一对应的关系。虽然它通常具有一些遵循JavaBean风格并关联了getter/setter的属 性,但这些属性是对应"视图"中的值,而不对应底层的应用数据模型。JSF的backing-bean可以具有JSF的actionListener和 valueChangeListener方法。

Controller Managed-Bean controller-bean request

描述: 这种类型的Managed-Bean充当MVC设计模式中的"控制器(Controller)"部分。controller bean的目的是执行某些业务逻辑并返回一个导航结果给JSF的导航处理器。JSF controller-bean通常具有JSF的action方法(而不是actionListener方法)

Support Managed-Bean support-bean session / application

描述: 这种类型的bean为MVC设计模式中的"视图(View)"部分中的一个或多个视图提供"支持"。典型的应用场景是提供一个 ArrayList<SelectItem>给JSF的h:selectOneMenu下拉列表,而且这个下拉列表将在多个JSF视图中出 现。如果这个下拉列表的数据是用户特定的,那么这个bean就应该放在session范围中。但是,如果数据是提供给所有用户的(例如一个选择省份的下拉 列表),那么这个bean就应该放在application范围中。

Utility Managed-Bean utility-bean application

描述: 这种bean为一个或多个JSF视图提供"工具"。例如一个能在多个Web应用中复用的FileUpload bean。

进行这种区分的一个主要好处是松耦合。你会问:这是虾米?那么,让我们先看一个紧耦合的例子,在这里MVC的概念被拼凑(或者说混淆)在单一的Managed-Bean中:

public class ModelAndBackingAndControllerBean {

private String fullName; // model-bean property
private boolean privacyRendered; // backing-bean property

// model-bean getter
public String getFullName() {
return fullName;
}

// model-bean setter
public void setFullName(String fullName) {
this.fullName = fullName;
}

// backing-bean getter
public boolean isPrivacyRendered() {
return privacyRendered;
}

// backing-bean setter
public void setPrivacyRendered(boolean privacyRendered) {
this.privacyRendered = privacyRendered;
}

// backing-bean actionListener for UI support logic
public void togglePrivacySection(ActionEvent actionEvent) {
privacyRendered = !privacyRendered;
}

// controller-bean business logic
public String submit() {
System.out.println("fullName=" + fullName);
return "success";
}
}

这种写法的问题是由于它充当model-bean,整个bean必须放在session范围。并且,当你想使用伪装的模型数据(mock model data)进行单元测试,你会发现根本行不通。因此为了修正这些问题,并实现松耦合,我们应该使用三个独立的Java类:

public class ModelBean {

private String fullName;

public void setFullName(String fullName) {
this.fullName = fullName;
}

public String getFullName() {
return fullName;
}
}

public class BackingBean {

private boolean privacyRendered;

public void setPrivacyRendered(boolean privacyRendered) {
this.privacyRendered = privacyRendered;
}

public boolean isPrivacyRendered() {
return privacyRendered;
}

public void togglePrivacySection(ActionEvent actionEvent) {
privacyRendered = !privacyRendered;
}

}

public class ControllerBean {

private ModelBean modelBean;

public ModelBean getModelBean() {
return modelBean;
}

public void setModelBean(ModelBean modelBean) {
// Dependency injected from the JSF managed-bean facility
this.modelBean = modelBean;
}

public String submit() {
System.out.println("fullName=" + getModelBean().getFullName());
return "success";
}

}

现在这些bean实例将属于不同的类,可以分别保持在合适的有效域中。model-bean可以放在session范围,backing-bean和controller-bean可以放在request范围,因而节省了服务器的内存资源。

最后,我们可以使用JSF MBF提供的依赖注入特性来把model-bean注入到controller-bean中。下面是WEB-INF/faces-config.xml配置文件示例,其中#{modelBean} EL表达式即为注入的配置:

<?xml version="1.0" encoding="UTF-8"?>
<faces-config xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
version="1.2">
<managed-bean>
<managed-bean-name>modelBean</managed-bean-name>
<managed-bean-class>myproject.ModelBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>backingBean</managed-bean-name>
<managed-bean-class>myproject.BackingBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>controllerBean</managed-bean-name>
<managed-bean-class>myproject.ControllerBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
区别JSF中不同种类的Managed-Bean jsf managebean
<managed-property>
<property-name>modelBean</property-name>
<value>#{modelBean}</value>
</managed-property>
</managed-bean>
</faces-config>

  

爱华网本文地址 » http://www.aihuau.com/a/25101014/190679.html

更多阅读

在Win7系统中添加打印机的方法 xp系统添加网络打印机

在Win7系统中添加打印机的方法——简介Windows7操作系统和之前用户群体庞大的WindowsXP操作系统在操作上大同小异,但是还是有些区别。对于Win7如何添加打印机,很多用户还不是很了解。这里我们做一个简单的教程,教会大家如何在Win7操作

怎么样在word文档中调整文字的大小 word文档调整行距

怎么样在word文档中调整文字的大小——简介在word文档中设置字体的大小是再普通、再简单不过的事了,我们常常根据不同要求来设置它们,文字的大小可以随意调整,可以调大也可以调小,具体方法如下:怎么样在word文档中调整文字的大小——方

RAM和ROM的区别 手机中ram和rom的区别

RAM和ROM的区别——简介RAM、ROM 一直是困扰不少用户的两个概念。很多手机用户不知道 RAM 和 ROM 到底有什么区别,总是一知半解,云雾缭绕。如今,小编为您解答,告诉您到底 RAM 和 ROM 有哪些区别。RAM和ROM的区别——RAM和ROM的区别RAM

电容在电路中各种作用的基本常识 一平行板电容器

A、电压源正负端接了一个电容(与电路并联),用于整流电路时,具有很好的滤波作用,当电压交变时,由于电容的充电作用,两端的电压不能突变,就保证了电压的平稳。当用于电池电源时,具有交流通路的作用,这样就等于把电池的交流信号短路,避免了由于

不同种类的版本控制工具优缺点 变速箱种类及优缺点

VSSVisualSourceSafe:微软的版本控制工具,仅支持Windows操作系统。虽然简单好用,但是仅适用于团队级开发,不能胜任企业级的开发工作。VSS优点:安装、配置、使用均较简单,很容易上手使用;操作简单,容易掌握;权限划分可到文件夹级,有Read、Che

声明:《区别JSF中不同种类的Managed-Bean jsf managebean》为网友未满岁的男生分享!如侵犯到您的合法权益请联系我们删除