zoukankan      html  css  js  c++  java
  • JSF学习笔记Managed Bean

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

         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

  • 相关阅读:
    南阳33(蛇形填数)规律题;
    南阳241(字母统计)
    南阳57(6174问题)
    android图形基础知识
    Linux中yum手动安装、手动建立仓库文件夹关联实现关联包自动安装、yum相关命令使用
    debug连线指令
    Qt之信号连接,你Out了吗?
    hdu-4607-Park Visit
    MySQL 分区表 partition线上修改分区字段,后续进一步学习partition (1)
    如何用正则将多个空格看成一个空格结合spllit()方法将文本数据入库
  • 原文地址:https://www.cnblogs.com/zxpgo/p/2570407.html
Copyright © 2011-2022 走看看