爪哇一角

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

          二 JSF JavaBean

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

          1.JSF JavaBean介紹

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

          作用是在真正的業務邏輯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等等型態,您可以設定<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一個非常大的區別,JSF支持反向注入,它可以更好的管理業務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(依賴注入實現)");

                               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就會顯示在頁面上。

           

          主站蜘蛛池模板: 北碚区| 双柏县| 贵阳市| 子长县| 井陉县| 高雄县| 仲巴县| 开原市| 巴南区| 青海省| 广河县| 宣化县| 桑植县| 德格县| 灵山县| 新乡县| 东平县| 将乐县| 无极县| 扎囊县| 盐源县| 洛阳市| 苏尼特右旗| 新乡市| 汾西县| 乡城县| 福建省| 长海县| 易门县| 海安县| 水城县| 哈尔滨市| 威信县| 河北区| 亳州市| 临高县| 鄯善县| 永清县| 延庆县| 乐昌市| 道孚县|