百科狗-知识改变命运!
--

受管理的bean和托管bean有什么区别

百变鹏仔1年前 (2023-12-21)阅读数 9#综合百科
文章标签事件表单

JSF引入了两个新概念:

managed bean和backing bean。JSF提供了强大的管理bean的机制。一个被JSF管理的JavaBean对象叫做managed bean。一个managed bean描述了一个bean如何创建和管理的,这些和bean的功能无关。

Backing bean定义了页面上的UI组件的属性和处理逻辑。每一个backing bean的属性对应一个组件或者组件的值。Backing bean同时定义了一组执行组件功能的方法,比如验证组件的数据,处理组件触发的事件,当组件activate时处理与导航相关的操作。

一个典型的JSF应用中的每一页面都有一个backing bean。然而,实际中强制页面和backing bean的一对一关系不是一个好的做法。它会导致类似代码重复的问题。实际情况中,一些页面也许会共享同一个backing bean。例如在JCatalog中,CreateProduct和EditProduct页面共享同一个ProductBean定义。

一个View对象是一个只在表示层使用的model对象。它包含着必须在View层显示的数据,包含着验证用户输入,处理事件,同业务逻辑层交互的逻辑。在基于JSF的应用中,backing bean就是view对象。在本文中,backing bean和view对象是可互换的概念。

与Struts中的ActionForm和Action概念相比,使用JSF中的backing bean开发更加符合OO设计习惯。一个backing bean不仅仅包含显示数据,还包括与这些数据相关的行为。而在Struts中,ActionForm和Action分别包含数据和逻辑。

我们大家都听说过domain object model(域对象模型)。那么domain object model和view object有什么不同呢?在一个简单的Web应用中,一个域对象模型经常穿越所有的层使用。然而在稍复杂的Web应用中,一个独立的view object是很需要的。Domain object model是关于业务对象(BO)的,应该属于业务逻辑层。它包含业务数据和与特定业务对象关联的业务逻辑。一个view object包含着显示相关的数据和行为。JCatalog的ProductListBean就是view object的一个好例子。它包含着表示层的数据和逻辑,比如分页相关的数据和逻辑。将view object和domain object model分开的一个缺点就是必须在两个对象模型之间进行data mapping。在JCatalog中,ProductBeanBuidler和UserBeanBuilder使用了基于反射的Commons-BeanUtils包来实现data mapping

具体地址讲述:http://infocenter.apusic.com/help/index.jsp?topic=/com.apusic.studio.doc.studio/output/eclipse/studio_web_managebean.html (managed bean)

http://infocenter.apusic.com/help/index.jsp?topic=/com.apusic.studio.doc.server/output/eclipse/backbean.html(backing bean)

区别:

您查询的关键词是:managed bean backing 区别 。如果打开速度慢,可以尝试快速版;如果想保存快照,可以添加到搜藏。

(百度和网页http://blog.csdn.net/zx870119/archive/2007/07/25/1707703.aspx的作者无关,不对其内容负责。百度快照谨为网络故障时之索引,不代表被搜索网站的即时页面。)

--------------------------------------------------------------------------------

用人生编写程序 用程序编写人生—— 程序人生

ぁ 旋子 ぁ —— zxJavazx870119

CSDN | 社区 | 技术中心 | BLOG首页 | 我的首页 | 我的文章 | 个人档案 | 联系作者 | 聚合 | | 搜索 | 登录 18篇原创: 0篇翻译: 0篇转载: 151次点击: 1个评论: 0个Trackbacks

文章

Hibernate(RSS)

Java(RSS)

JSF(RSS)

JSP(RSS)

Spring(RSS)

Struts(RSS)

WebWork(RSS)

框架集成(RSS)

系统维护(RSS)

收藏

相册

存档

2007年07月(17)

2007年06月(1)

最近评论

wyj444698561:高手!被我发现了!交个朋友

上一篇: Java集合框架 | 下一篇: Hibernate先知

JSF 与 Struts 的区别

Struts和JSF/Tapestry都属于表现层框架,这两种分属不同性质的框架,后者是一种事件驱动型的组件模型,而Struts只是单纯的MVC模式框架,老外总是急吼吼说事件驱动型就比MVC模式框架好,何以见得,我们下面进行详细分析比较一下到底是怎么回事?

首先事件是指从客户端页面(浏览器)由用户操作触发的事件,Struts使用Action来接受浏览器表单提交的事件,这里使用了Command模式,每个继承Action的子类都必须实现一个方法execute。

在struts中,实际是一个表单Form对应一个Action类(或DispatchAction),换一句话说:在Struts中实际是一个表单只能对应一个事件,struts这种事件方式称为application event,application event和component event相比是一种粗粒度的事件。

struts重要的表单对象ActionForm是一种对象,它代表了一种应用,这个对象中至少包含几个字段,这些字段是Jsp页面表单中的input字段,因为一个表单对应一个事件,所以,当我们需要将事件粒度细化到表单中这些字段时,也就是说,一个字段对应一个事件时,单纯使用Struts就不太可能,当然通过结合JavaScript也是可以转弯实现的。

而这种情况使用JSF就可以方便实现,

#{login.userId}表示从名为login的JavaBean的getUserId获得的结果,这个功能使用struts也可以实现,name="login" property="userId"

关键是第二行,这里表示如果userId的值改变并且确定提交后,将触发调用类UserLoginChanged的processValueChanged(...)方法。

JSF可以为组件提供两种事件:Value Changed和 Action. 前者我们已经在上节见识过用处,后者就相当于struts中表单提交Action机制,它的JSF写法如下:

从代码可以看出,这两种事件是通过Listerner这样观察者模式贴在具体组件字段上的,而Struts此类事件是原始的一种表单提交Submit触发机制。如果说前者比较语言化(编程语言习惯做法类似Swing编程);后者是属于WEB化,因为它是来自Html表单,如果你起步是从Perl/PHP开始,反而容易接受Struts这种风格。

基本配置

Struts和JSF都是一种框架,JSF必须需要两种包JSF核心包、JSTL包(标签库),此外,JSF还将使用到Apache项目的一些commons包,这些Apache包只要部署在你的服务器中既可。

JSF包下载地址:http://java.sun.com/j2ee/javaserverfaces/download.html选择其中Reference Implementation。

JSTL包下载在http://jakarta.apache.org/site/downloads/downloads_taglibs-standard.cgi

所以,从JSF的驱动包组成看,其开源基因也占据很大的比重,JSF是一个SUN伙伴们工业标准和开源之间的一个混血儿。

上述两个地址下载的jar合并在一起就是JSF所需要的全部驱动包了。与Struts的驱动包一样,这些驱动包必须位于Web项目的WEB-INF/lib,和Struts一样的是也必须在web.xml中有如下配置:

Faces Servlet

javax.faces.webapp.FacesServlet

1

Faces Servlet

*.faces

这里和Struts的web.xml配置何其相似,简直一模一样。

正如Struts的struts-config.xml一样,JSF也有类似的faces-config.xml配置文件:

/index.jsp

login

/welcome.jsp

user

com.corejsf.UserBean

session

在Struts-config.xml中有ActionForm Action以及Jsp之间的流程关系,在faces-config.xml中,也有这样的流程,我们具体解释一下Navigation:

在index.jsp中有一个事件:

action的值必须匹配form-outcome值,上述Navigation配置表示:如果在index.jsp中有一个login事件,那么事件触发后下一个页面将是welcome.jsp

JSF有一个独立的事件发生和页面导航的流程安排,这个思路比struts要非常清晰。

managed-bean类似Struts的ActionForm,正如可以在struts-config.xml中定义ActionForm的scope一样,这里也定义了managed-bean的scope为session。

但是如果你只以为JSF的managed-bean就这点功能就错了,JSF融入了新的Ioc模式/依赖性注射等技术。

Ioc模式

对于Userbean这样一个managed-bean,其代码如下:

public class UserBean {

private String name;

private String password;

// PROPERTY: name

public String getName() { return name; }

public void setName(String newValue) { name = newValue; }

// PROPERTY: password

public String getPassword() { return password; }

public void setPassword(String newValue) { password = newValue; }

}

user

com.corejsf.UserBean

session

name

me

password

secret

faces-config.xml这段配置其实是将"me"赋值给name,将secret赋值给password,这是采取Ioc模式中的Setter注射方式。

Backing Beans

对于一个web form,我们可以使用一个bean包含其涉及的所有组件,这个bean就称为Backing Bean, Backing Bean的优点是:一个单个类可以封装相关一系列功能的数据和逻辑。

说白了,就是一个Javabean里包含其他Javabean,互相调用,属于Facade模式或Adapter模式。

对于一个Backing Beans来说,其中包含了几个managed-bean,managed-bean一定是有scope的,那么这其中的几个managed-beans如何配置它们的scope呢?

...

visit

#{sessionScope.visit}

这里配置了一个Backing Beans中有一个setVisit方法,将这个visit赋值为session中的visit,这样以后在程序中我们只管访问visit对象,从中获取我们希望的数据(如用户登陆注册信息),而visit是保存在session还是application或request只需要配置既可。

UI界面

JSF和Struts一样,除了JavaBeans类之外,还有页面表现元素,都是是使用标签完成的,Struts也提供了struts-faces.tld标签库向JSF过渡。

使用Struts标签库编程复杂页面时,一个最大问题是会大量使用logic标签,这个logic如同if语句,一旦写起来,搞的JSP页面象俄罗斯方块一样,但是使用JSF标签就简洁优美:

如果authenticationBean中inboxAuthorized返回是假,那么这一行标签就不用显示,多干净利索!

先写到这里,我会继续对JSF深入比较下去,如果研究过Jdon框架的人,可能会发现,Jdon框架的jdonframework.xml中service配置和managed-bean一样都使用了依赖注射,看来对Javabean的依赖注射已经迅速地成为一种新技术象征,如果你还不了解Ioc模式,赶紧补课。

Bashu wild grass carp catfish

Spicy catfish frog Aberdeen

Blackfish Ball Creek catfish

Fresh mountain spring water fish pepper chicken

Fashion Sichuan

Flowers flowers Law Law, cooked chicken breast strips cooked鱼籽

Flowers flowers肥肠kamphaeng Law Law kamphaeng eel

Jiang burst her bubble Aberdeen Aberdeen gluttonous frog

Spicy beans Bullfrog basin water shrimp basin

Aquilaria village dog dog

Go to野山菌Wushan fragrance of chicken ribs

Stone stone ribs eel

Bullfrog肥肠stone stone

Thousand stone pot vinegar chicken Chicken

Cold dish

Farmers burn mix长茄Law Kawakita Mesona

Saliva chicken elbow flower sauce

Friday crispy beef butter fish

Sichuan泡椒sausage, chicken's feet

Spiced spinach mix donkey fans

Large fruit salad side dishes

受管理的bean和托管bean有什么区别

Kidney beans plum sesame oil flammulina

Hot and sour refreshing slice fern root powder

小炒beef松什Kam豆花

Distilled water three color duck eggs Konjac

Braised sirloin鲜笋fresh mushroom powder

Polytricha剁椒burning villages Beef

Fort老鸭acid radish

Boutique Hunan

Changsha bowl of incense Xiangxi grandmother炒肉

Huang干锅rural white pepper beef炒鸡gizzard

Hairtail干锅Gordon fans were the donkey

Month小炒bone小炒tea buds do

Beans steamed duck腊鱼小炒prolyl

小炒yellow pepper beef millet small cock

Farm东北菜

Northeast乱炖gun head cake

Small bowl of beef meat slipped paragraph

Farmers do mashed beans stew meat

Agrocybe Braised pork belly burn garlic Article

Ribs stewed beans ribs stewed kelp

Stick tibial bone stewed sauerkraut stewed sauerkraut

Spareribs sauce meatball vegetable soup

粉条stewed pork bone paste

White meat chicken mushrooms stewed sauerkraut

Old corn stew bone cavity Northeast row

Pot packets of meat stewed spareribs old corn

Quality cold dish

Balsam pear salad mix萝卜皮cook in soy

Kale salad mix almond silk tripe

Sweet and sour radish夫妻肺片

Jellyfish老醋the first self-made frozen meat

Vogelii radish Do Northeast lapi

Tianfu kimchi harvest

Preserved bean curd老醋fungus

Visco-cucumber sauce cucumber shoot

Egg ginger refreshing celery

Cold dish homemade incense卤鸡gizzard

Kelp silk tiger mixed vegetables

老醋fried peanuts peanuts

Spicy bean thread

Classic Sichuan

Spicy shrimp shrimp green ball

Do stir shredded beef Beef Hang Law

Smoked tea eggs smoked tea eggs

Cuttlefish cuttlefish Bradysia Dahongpao Aberdeen Aberdeen

Spicy剁椒鱼头hoof Cosmetology

泡椒Bullfrog水煮肉片(beef)

Chongqing spicy chicken wings毛血旺

Chongqing Chongqing Spicy chicken sauerkraut fish

Cylinder clearance Waagenophylloid eel dishes泡椒

Palace burst shrimp boiled eel

那些汉字可以用拼音来代替

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)