在书上看到些东西,觉得可以保存在博客里,结果在网上一搜,已经有人这么做了,那我就省省打字这点事吧。

JSF使用 JavaBean 来达到程序逻辑与视图分离的目的,在JSF中的Bean其角色是属于Backing Bean,又称之为Glue Bean,其作用是在真正的业务逻辑Bean及UI组件之间搭起桥梁,在Backing Bean中会呼叫业务逻辑Bean处理使用者的请求,或者是将业务处理结果放置其中,等待UI组件取出当中的值并显示结果给使用者。
     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-class>设定所要使用的Bean类,<managed-bean-name>设定之名称,可供我们在JSF页面上使用Expression Language来取得或设定Bean       的属性,例如:

<h:inputText value="#{user.name}"/>

<managed-bean-scope>设定Bean的存活范围,您可以设定为request、session 与application,设定为request时,Bean的存活时间为请求阶段,设定为session则在使用者应用程序交互开始,直到关闭浏览器或显式的结束会话为止(例如登出程序),设定为application的话,则Bean会一直存活,直到应用程序关闭为止(session和application的区别不是太懂)。
      您还可以将存活范围设定为none,当设定为none时会在需要的时候生成一个新的Bean,例如您在一个method中想要生成一个临时的Bean,就可以将之设定为none。
     在JSF页面上要取得Bean的属性,是使用 JSF表示语言 (Expression Language),要注意到的是,JSF表示语言是写成 #{expression},而 JSP表示语言 是写成  ${expression},因为表示层可能是使用JSP,所以必须特别区分,另外要注意的是,JSF的标签上的属性设定时,只接受JSF表示语言。
     
     一个Bean最基本要定义Bean的名称、类与存活范围,例如:

 <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>

如果要在其它类中取得Bean对象,则可以先取得javax.faces.context.FacesContext,它代表了JSF目前的执行环境对象,接着尝试取得javax.faces.el.ValueBinding对象,从中取得指定的Bean对象,例如:
     FacesContext context = FacesContext.getCurrentInstance();
     ValueBinding binding =context.getApplication().createValueBinding("#{user}");
     UserBean user = (UserBean) binding.getValue(context);
     如果只是要尝试取得Bean的某个属性,则可以如下:
     FacesContext context = FacesContext.getCurrentInstance();
     ValueBinding binding =context.getApplication().createValueBinding("#{user.name}");
     String name = (String) binding.getValue(context);
     如果有必要在启始Bean时,自动设置属性的初始值,则可以如下设定:

 <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-property><property-name>name</property-name><value>caterpillar</value></managed-property><managed-property><property-name>password</property-name>
     <value>123456</value>
   </managed-property>
 </managed-bean>

如果要设定属性为 null 值,则可以使用<null-value/>标签,例如:

<managed-property>
  <property-name>name</property-name>
  <null-value/>
</managed-property>
<managed-property>
  <property-name>password</property-name>
  <null-value/>
</managed-property>

当然,您的属性不一定是字符串值,也许会是int、float、boolean等等类型,您可以设定<value> 值时指定这些值的字符串名称,JSF会尝试进行转换,例如设定为true时,会尝试使用Boolean.valueOf()方法转换为boolean的 true,以下是一些可能进行的转换:


类型                                                                                  转换


short、int、long、float、double、byte,或相应的Wrapper类      尝试使用Wrapper的valueOf()进行转换,如果没有设置,则设为0
boolean 或 Boolean                                                             尝试使用Boolean.valueOf()进行转换,如果没有设置,则设为false
char 或 Character                                                                取设置的第一个字符,如果没有设置,则设为0
String 或 Object                                                                即设定的字符串值,如果没有设定,则为空字符串new String("")


您也可以将其它产生的Bean设定给另一个Bean的属性,例如:

<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>
  <managed-bean-name>other</managed-bean-name>
  <managed-bean-class>onlyfun.caterpillar.OtherBean</managed-bean-class>
  <managed-bean-scope>session</managed-bean-scope>
  <managed-property>
    <property-name>user</property-name>
    <value>#{user}</value>
  </managed-property>
</managed-bean>

在上面的设定中,在OtherBean中的user属性,接受一个UserBean类型的对象,我们设定为前一个名称为user的UserBean对象。

Beans上的List, Map
     如果您的Bean上有接受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>

这是一个设定接受List类型的属性,我们使用<list-entries>标签指定将设定一个List对象,其中<value-class>指定将存入List的类型,而<value>指定其值,如果是基本类型,则会尝试使用指定的 <value-class>来作Wrapper类。
     设定Map的话,则是使用<map-entries>标签,例如:

<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>
  <map-entries>
    <value-class>java.lang.Integer</value-class>
    <map-entry>
      <key>someKey1</key>
      <value>100</value>
    </map-entry>
    <map-entry>
      <key>someKey2</key>
      <value>200</value>
    </map-entry>
  </map-entries>
</managed-property>
</managed-bean>

由于Map对象是以key-value对的方式来存入,所以我们在每一个<map-entry>中使用<key>与<value>标签来分别指定。
您也可以直接像设定Bean一样,设定一个List或Map对象,例如在JSF附的范例中,有这样的设定:

<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>

而范例中另一个设定List的例子如下:

<managed-bean>
  <managed-bean-name>statusStrings</managed-bean-name>
  <managed-bean-class>java.util.ArrayList</managed-bean-class>
  <managed-bean-scope>request</managed-bean-scope>
  <list-entries>
    <null-value/>
    <value>Open</value>
    <value>Submitted</value>
    <value>Accepted</value>
    <value>Rejected</value>
   </list-entries>
</managed-bean>

参考:http://hi.baidu.com/bjwdm007/blog/item/a139ed2d08f532341e308936.html

转载于:https://www.cnblogs.com/zxpgo/archive/2012/06/29/2570407.html

JSF学习笔记-Managed Bean相关推荐

  1. 1.5 Hello, world! 解剖 -JSF实战 -hxzon -jsf学习笔记

    为什么80%的码农都做不了架构师?>>>    1.5 Hello, world! 解剖 -JSF实战 -hxzon -jsf学习笔记 既然已经对JSF能够解决什么问题有了初步理解, ...

  2. JSF学习笔记--JSF简介,JSF第一个应用程序

    1.JSF简介:  JavaServer Faces的提出,让不同技术的人员可以彼此合作又不互相干扰,JavaServer Faces 也允许自定义标签,Java Community Process( ...

  3. JSF学习笔记超详细,从入门到精通,持续更新中~

    JSF笔记 1.JSF概述 JavaServer Faces (JSF) 是一种用于构建Java Web 应用程序的标准框架(是Java Community Process 规定的JSR-127标准) ...

  4. Spring2.5.6学习笔记-实例化bean的几种方法

    1. 用构造器来实例化 <bean id="exampleBean" class="examples.ExampleBean"/> <bean ...

  5. Spring学习笔记八--Bean生命周期和后置处理器

    为什么80%的码农都做不了架构师?>>>    Bean生命周期和后置处理器 IOC容器的bean生命周期 1.构造器或工厂方法建立bean实例 2.bean属性赋值,引用其他bea ...

  6. [原创]java WEB学习笔记36:Java Bean 概述,及在JSP 中的使用,原理

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  7. 8. SpringBoot基础学习笔记

    SpringBoot基础学习笔记 课程前置知识说明 1 SpringBoot基础篇 1.1 快速上手SpringBoot SpringBoot入门程序制作 1.2 SpringBoot简介 1.2.1 ...

  8. Spring Cloud 学习笔记(1 / 3)

    Spring Cloud 学习笔记(2 / 3) Spring Cloud 学习笔记(3 / 3) - - - 01_前言闲聊和课程说明 02_零基础微服务架构理论入门 03_第二季Boot和Clou ...

  9. Mybatis的学习笔记

    MyBatis Mybatis是一款非常优秀的持久层框架,学习的目的是要掌握精通. 那么今天我们就来学习一下这个优秀的框架知识! 此外,由于博主的水平的原因,文章的质量可能不会太高,请酌情观看.如果大 ...

最新文章

  1. 关于介绍编程前景的html文档,HTML编程基础稿件(32页)-原创力文档
  2. LA 6474 Drop Zone (最小割)
  3. php获取ip 1,为什么php获取ip显示::1?
  4. 每日一练 20190523
  5. 3.2.2.5 BRE运算符优先级
  6. 接软件开发项目,你需要知道这些!
  7. MySql(windows)安装步骤整理
  8. 解调去载波后均衡信道与实际信道的关系
  9. linux添加物理卷编辑文件夹,Red hat Linux下的逻辑卷管理器LVM-上
  10. go语言sleep一纳秒不准的思考--CPU时间片
  11. 用gcc/g++编译运行C/C++程序
  12. 导入php插件_微信公众号吸粉的方法(将网站100%的流量导入到公众号中)
  13. 佳能打印机清零操作及清零软件
  14. 第十届“泰迪杯“感谢学习总结(国三附源码)
  15. 过去式加ed的发音_过去式,过去分词,加ed 后的读法
  16. 使用Python求解一元二次方程
  17. Matplotlib学习笔记——画三维图
  18. 快速上手 ClickHouse
  19. (很全)英文外贸网站从建站到推广流程,外贸企业SEOer大菜鸟分享
  20. 舆情监测系统软件如何选择及系统作用详介

热门文章

  1. Python2.0 模块大全
  2. 电子临时笔记做完,想不起回顾怎么办?
  3. C语言实现直角坐标转换为极坐标
  4. 金士顿 4G U盘量化usb-cd rom详解(图)
  5. 《程序员入职甲乙方公司的套路》。送给要入职的程序员们,避免踩坑。
  6. SpringBoot整合Shiro实现权限管理与登陆注册
  7. Ubuntu不能打开exfat格式的U盘
  8. 如何用lisp画蔓叶线_利用 TI 图形计算器绘制美丽的极坐标曲线
  9. [-137]:服务器正在运行或者存在其他进程正在操作同一个库
  10. 30位烈士葬身火海,请记住英雄的名字!