爪哇一角

          共同探討STRUTS#HIBERNATE#SPRING#EJB等技術
          posts - 3, comments - 6, trackbacks - 0, articles - 99
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          二 JSF JavaBean

          Posted on 2009-01-20 14:46 非洲小白臉 閱讀(261) 評論(0)  編輯  收藏 所屬分類: JSF

          1.JSF JavaBean介紹

          JSF使用 JavaBean 來達到程式邏輯與視圖分離的目的,在JSF中的Bean其角色是屬于Backing Bean,又稱之為Glue Bean。

          作用是在真正的業(yè)務邏輯Bean及UI元件之間搭起橋梁,相當于STRUTS中的FormBean,對頁面的值進行存儲。

          JSF將Bean的管理集中在faces-config.xml中,上面介紹的JSF的例子如下:

          <!-- bean定義 -->

              <managed-bean>

                  <managed-bean-name>user</managed-bean-name>

                   <managed-bean-class>test.UserBean</managed-bean-class>

                  <managed-bean-scope>session</managed-bean-scope>

              </managed-bean>

          <managed-bean-class>設定所要使用的Bean類別,<managed-bean-name>設定之名稱,

          <managed-bean-scope>設定Bean的存活范圍,您可以設定為request、session 與application,設定為request時,Bean的存活時間為請求階段。

          您還可以將存活范圍設定為none,當設定為none時會在需要的時候生成一個新的Bean,例如您在一個method中想要生成一個臨時的Bean,就可以將之設定為none。

           

          如果有必要在啟始Bean時,自動設置屬性的初始值,則可以如下設定:

          ....
          <managed-bean>
            <managed-bean-name>user</managed-bean-name>
              <managed-bean-class>
                test.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>
          .... 

          您的屬性不一定是字串值,也許會是int、float、boolean等等型態(tài),您可以設定<value> 值時指定這些值的字串名稱,JSF會嘗試進行轉換。

           

          您也可以將其它產生的Bean設定給另一個Bean的屬性,例如:

          <managed-bean>

          <managed-bean-name>user</managed-bean-name>

          <managed-bean-class>test.UserBean</managed-bean-class>

          <managed-bean-scope>session</managed-bean-scope>

          </managed-bean>

          <managed-bean>

          <managed-bean-name>userinfo</managed-bean-name>

          <managed-bean-class>test.UserBeanInfo</managed-bean-class>

          <managed-bean-scope>session</managed-bean-scope>

          <managed-property>

          <property-name>userBean</property-name>

          <property-class>test.UserBeanService</property-class>

          <value>#{user}</value>

          </managed-property>

          </managed-bean>

          UserBeanInfo里面定義了變量userBean,變量userBean的類型是類UserBean,這里就把變量userBean直接賦值為#{user}。

           

          2.JSF JavaBean示例(反向注入)

          其實通常我們所說的反向注入(Ioc)就是這個,這也是JSF和STRUTS一個非常大的區(qū)別,JSF支持反向注入,它可以更好的管理業(yè)務Bean的對象。

          下面舉個例子:

          在配置文件中:

          <managed-bean>

          <managed-bean-name>userinfo</managed-bean-name>

          <managed-bean-class>test.UserBeanInfo</managed-bean-class>

          <managed-bean-scope>session</managed-bean-scope>

          <managed-property>

          <property-name>userBean</property-name>

          <property-class>test.UserBeanService</property-class>

          <value>#{user}</value>

          </managed-property>

          </managed-bean>

          這樣,當UserBeanInfo的實例建立的時候,就會自動將UserBeanService的對象賦值給UserBeanInfo實例的變量userBean。

          JsfBeanExample.jsp

          <%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%>

          <%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%>

          <%@page contentType="text/html;charset=utf-8"%>

          <html>

          <head>

          <title>JSF JavaBean示例(反向注入)</title>

          </head>

          <body>

          <f:view>

                 <h:form>

                        <h3>請輸入您的名稱</h3>

                        <h:outputText value="#{user.errMessage}" style="color:red"/><p>

                        <!-- 姓名 -->

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

                        <p>密碼:<h:inputSecret value="#{user.password}"/>

                       

                        <p><h:commandButton value="送出"

                               action="#{userinfo.verify1}" />

                 </h:form>

          </f:view>

          </body>

          </html>

           

          UserBeanInfo.java:

          package test;

          public class UserBeanInfo {

                 UserBeanService userBean;

                 public String verify1() {

                        if (!userBean.getName().equals("sunlin")

                                      || !userBean.getPassword().equals("123456")) {

                               userBean.setErrMessage("名稱或者密碼錯誤1(依賴注入實現(xiàn))");

                               return "failure";

                        } else {

                               return "success";

                        }

                 }

                 /**

                  * userBean をセットする

                  * @param userBean the userBean to set

                  */

                 public void setUserBean(UserBeanService userBean) {

                        this.userBean = userBean;

                 }

          }

          UserBeanInfo的類里面并沒有綁定頁面輸入的信息,頁面輸入的信息是綁定在Userbean中的。但是我們在faces-config.xml配置文件中設置了反向注入,

          UserBeanService直接設置到UserBeanInfo的變量userBean里,所以在類UserBeanInfo中可以直接取得Userbean中的信息進行Check。

          ▲注意:UserBeanInfo中必須要定義setUserBean()方法。

          http://localhost:8080/jsfTest/pages/jsfBeanExample.faces 當你用戶名或者密碼出錯的時候,Message就會顯示在頁面上。

           

          主站蜘蛛池模板: 河津市| 清水河县| 宽城| 德保县| 汝阳县| 广丰县| 建湖县| 旬阳县| 东阿县| 民和| 松溪县| 桐梓县| 镇巴县| 乳源| 宣城市| 禹城市| 仁化县| 白玉县| 冀州市| 无锡市| 辽阳市| 土默特左旗| 海原县| 竹北市| 游戏| 丹凤县| 罗山县| 芜湖市| 镇宁| 云梦县| 徐汇区| 彰化市| 龙岩市| 昔阳县| 壤塘县| 沧州市| 钦州市| 肃北| 平乡县| 峨眉山市| 杭锦旗|