前几天遇到了一个需求-----将一页面中的值传到该页面的标签页中(自定义的)并绑到该标签页后台Bean中经行处理(主页与标签页分别为不同的bean),一般的传值我倒是有很多方法去实现,但都是必须要有事件来支持(如<a4j:actionparam assignTo="#{}">就必须在<a4j:a4j:commandLink>中),而我的需求是不允许存在事件的。我最后的解决办法是:
主页:<custombiz:businessSelectExtend workID="WP34" bizRender="bizInfoView,comButton"/>
标签页: <h:inputHidden value="#{workID}" binding="#{businessSelect.workID}"/>
说明:这里的custombiz:businessSelectExtend 是自定义标签,代表整个标签页。workID是要传的值,businessSelect.workID是标签页后台Bean的接受属性。在进入主页时后台可通过getWorkID()来获得值“WP34”,如果主页的workID也可以写EL表达式,这将使得标签页获得是动态的值。
感受:只要一进入该页面,Jsf就会自动调用setWorkID()方法将页面的"value"的内容(即主页workID的值)传给后台bean的workID属性.这就表明binding与value绑定的差别,value绑定在初始化时是依赖于后台bean的,也因此jsf的request范围的bean一刷新,value绑定的值就会为null.而binding在初始化是依赖的页面,在初始化时它会将页面的值将set进入后台bean.
个人觉得binding的有两个优点:
1)不与value绑定冲突! 使得一个标签可以传值的功能,再加上Jsf的标签可以绑定的任意你想绑定的类的属性(听说struts只能帮定到页面特定的FormBean,灵活性较差).因而Jsf还是很强大的(可惜这是有代价的!!).
2)由于binding到后台的是均是对象(UI**),Jsf对其进行了大量的封装使得后台对前台的控制力更加的强劲!!!
3)value与binding的绑定最大区别个人认为是在初始化时,Jsf出发点的不同.value绑定的出发点是bean,因而在Jsf初始化时会将后台bean的值付到页面(由于bean的初始化,而jsf的声明周期说明bean在request范围时是重新构建的,因而bean初始化后值均为null或0).而binding正好相反,它的出发点是页面,当初始化时会在bean重新构建之后将上次页面的值付给后台bean.
本文讨论了如何在没有事件支持的情况下,将页面值传递至自定义标签页并绑定至后台Bean进行处理。通过自定义标签和EL表达式实现了动态值传递,并对比了value绑定和binding绑定的区别。
6824

被折叠的 条评论
为什么被折叠?



