page scope介绍及用途

jsf1.2只提供了3中作用域,application、session、request;jsf2.0增加 view和自定义作用域;seam 使用page作用域扩展了view作用域。

 

有一个非常普遍的需求在jsf1.2中难于解决,当对一个request级的业务对象编辑时页面上必须有这个对象的全部属性的输入域,包括不可改变的对象标识(id)必须用<h:hidden value="#{mb.myObject.id}"/>,如果某种情况下只需要对部分属性进行编辑,而另外的情况下对其他的属性进行编辑,但是这两个页面中必须有全部属性输入框,不需要修改的部分用hidden,如果对象有几十个属性这将是件很麻烦的事情。

 

要想页面上只写要编辑的属性的输入框,那么必须提高作用域级别,换成session级别显然是不合适的(可以解决该问题,但会带来其他问题)。seam引入了page作用域,简单来说就是显示编辑页面后将业务对象保存到组件树中,再次提交时首先从组件树中恢复出业务对象,这样页面上没有的属性也不会丢值,只对页面上有的属性进行更新。

 

源码讲解。。。。。。

 

如果没有使用seam可以使用一个简陋的seam实现代替,这是个jsf jar,放到web-inf/lib下即可。

在classpath下增加managebean.xml文件,在里面配置你的page作用域bean,不需要在jsf中配置了。

<?xml version="1.0" encoding="UTF-8"?>
<!-- 
<mbean><class key="EquipmentBB" value="cn.cjitec.its.common.bb.EquipmentBB"/></mbean>
-->
<mbean><class key="EquipmentBB" value="cn.cjitec.its.common.bb.EquipmentBB"/></mbean>
<mbean><class key="ContractBB" value="cn.cjitec.its.common.bb.ContractBB"/></mbean>
<mbean><class key="CusOrgBranch" value="cn.cjitec.its.common.bb.CusOrgBranch"/></mbean>

 

bean示例,一定要序列化呀

@Name("EquipmentBB")
@Scope(ScopeType.PAGE)
public class EquipmentBB implements Serializable {

 

你可能感兴趣的:(bean,struts,JSF,配置管理,seam)