<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    爪哇一角

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

    四 JSF轉換器

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

    1.JSF轉換器的應用

    Web應用程式與瀏覽器之間傳送的資料基本上都是字串文字,而Java應用程式本身基本上則是物件,所以物件資料必須經由轉換傳送給瀏覽器.

    JSF定義了一系列標準的轉換器(Converter),對于基本資料型態 (primitive type)或是其Wrapper類別,

    JSF會使用

    javax.faces.Boolean、

    javax.faces.Byte、

    javax.faces.Character、

    javax.faces.Double、

    javax.faces.Float、

    javax.faces.Integer、

    javax.faces.Long、

    javax.faces.Short等自動進行轉換,對于BigDecimal、BigInteger,則會使用javax.faces.BigDecimal、javax.faces.BigInteger自動進行轉換。

    DateTime、Number,我們可以使用<f:convertDateTime>、<f:convertNumber>標簽進行轉換。

     

    當我們需要在頁面上綁定或者顯示Bean里的信息的時候,如果Bean里的字段不是String類型的,則需要將其先轉換成String類型。

    例:

    先定義一個Bean,里面包含了一個Date類型的變量。

    package test;

    import java.util.Date;

    //JSF的轉換器示例

    public class JsfCoverter {

           private Date date = new Date();

        public Date getDate() {

            return date;

        }

        public void setDate(Date date) {

            this.date = date;

        }

    }

     

    再建立一個Jsp,用來顯示JsfCoverter里面的變量date。

    <%@ 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"%>

    <f:view>

           <html>

           <head>

           <title>轉換器示范</title>

           </head>

           <body>

           <b> <h:outputText value="#{jsfcover.date}">

                  <f:convertDateTime pattern="dd/MM/yyyy" />

           </h:outputText> </b>

           <h:form>

                  <h:inputText id="dateField" value="#{jsfcover.date}">

                         <f:convertDateTime pattern="dd/MM/yyyy" />

                  </h:inputText>

                  <h:message for="dateField" style="color:red" />

                  <br>

                  <h:commandButton value="送出" action="show" />

           </h:form>

           </body>

           </html>

    </f:view>

    <f:convertDateTime>中指定了pattern的樣式為dd/MM/yyyy,你在<h:inputText>中輸入的是String類型的信息,但是和這個字段綁定的是一個Date變量(jsfcover.date),

    因此你必須將輸入的String類型轉換成Date類型才行。而<f:convertDateTime>就是幫我們做這件事的。

    如果轉換出錯的話,<h:message>則會顯示錯誤信息。

     

    當然,我們還需要配置定義的Bean,以及設子頁面的跳轉,才能正常運行。

    <navigation-rule>

        <from-view-id>/*</from-view-id>

        <navigation-case>

            <from-outcome>show</from-outcome>

            <to-view-id>/pages/jsfCoverter.jsp</to-view-id>

        </navigation-case>

    </navigation-rule>

     

    <!-- jsf轉換器 -->

    <managed-bean>

        <managed-bean-name>jsfcover</managed-bean-name>

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

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

    </managed-bean>

     

    啟動Tomcat,就可以運行了http://localhost:8080/jsfTest/pages/jsfCoverter.faces

    具體程序參看示例程序.

     

    2.自定義JSF轉換器

    除了使用標準的轉換器之外,您還可以自行定制您的轉換器,您可以實作javax.faces.convert.Converter接口,這個接口有兩個要實作的方法:

    public Object getAsObject(FacesContext context,

                               UIComponent component,

                               String str);

     public String getAsString(FacesContext context,

                               UIComponent component,

                               Object obj);

    簡單的說,第一個方法會接收從客戶端經由HTTP傳來的字符串數據,您在第一個方法中將之轉換為您的自訂對象,這個自訂對象將會自動設定給您指定的Bean對象;

    第二個方法就是將從您的Bean對象得到的對象轉換為字符串,如此才能藉由HTTP傳回給客戶端。

     

    上面的<f:convertDateTime>轉換器可以將用戶輸入的String類型的信息轉換成Beandate變量,顯示時再由Date型轉成String顯示在頁面上。

    但是很多項目需要將用戶輸入的或者檢索的不規則的Date格式統一化,這就需要用戶自己定義一個共通的轉換器了。

     

    首先建立一個轉換器,它要實現javax.faces.convert.Converter接口

    package test;

    import java.text.SimpleDateFormat;

    import java.util.Date;

    import javax.faces.application.FacesMessage;

    import javax.faces.component.UIComponent;

    import javax.faces.context.FacesContext;

    import javax.faces.convert.Converter;

    import javax.faces.convert.ConverterException;

    public class JsfMyCoverter implements Converter {

           public Object getAsObject(FacesContext context, UIComponent component,

    頁面輸入信息的轉換

     
                         String obj) {

                  // TODO Auto-generated method stub

                  try {

                         Date date = new Date();

                         String objFor = obj.substring(0,4) + "-"

                                + obj.substring(4,6) + "-"

                                + obj.substring(6,8);

                         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

                         date = sdf.parse(objFor);

                         return date;

                  } catch (Exception e) {

                         FacesMessage facesMessage = new FacesMessage(

                                       FacesMessage.SEVERITY_ERROR, "日期格式錯誤", "日期格式錯誤");

                         throw new ConverterException(facesMessage);

    頁面顯示信息的轉換

     
                  }

           }

           public String getAsString(FacesContext context, UIComponent component,

                         Object obj) {

                  // TODO Auto-generated method stub

                  String res = null;

                  if (obj instanceof Date) {

                         String pattern = "yyyy-MM-dd";

                         SimpleDateFormat sdf = new SimpleDateFormat(pattern);

                         res = sdf.format(obj);

                         return res;

                  }

                  return res;

           }

    }

     

    同時定義表示頁面jsfMyCoverter.jsp.

    別忘記faces-config.xml中完成注冊:

    <!-- 自定義轉換器 -->

        <navigation-rule>

            <from-view-id>/*</from-view-id>

            <navigation-case>

                <from-outcome>myConverter</from-outcome>

                <to-view-id>/pages/jsfMyCoverter.jsp</to-view-id>

            </navigation-case>

        </navigation-rule>

     

    <!-- 自定義轉換器 -->

        <converter>

            <converter-id>dateFormatCoverter</converter-id>

            <converter-class>

                test.jsfMyCoverter

            </converter-class>

        </converter>

    更新Tomcathttp://localhost:8080/jsfTest/pages/jsfMyCoverter.faces就可以看到自定義的轉換器了。

    具體程序參看示例程序。

     

    主站蜘蛛池模板: 在线永久免费观看黄网站| 亚洲精品高清国产一线久久| 猫咪www免费人成网站| 亚洲码国产精品高潮在线| 久久永久免费人妻精品下载| 亚洲精华国产精华精华液网站| 国产亚洲精品a在线观看| 四虎永久在线精品免费观看视频| 日韩在线视精品在亚洲| 亚洲一区二区电影| 免费A级毛片无码A∨男男| 久久免费公开视频| 黄页网址在线免费观看| 亚洲午夜久久久精品影院| 亚洲乱码日产精品a级毛片久久| 95老司机免费福利| 中国极品美軳免费观看| 亚洲熟女精品中文字幕| 久久精品国产亚洲AV麻豆不卡| 热99re久久免费视精品频软件| 久久久国产精品福利免费| 日韩亚洲翔田千里在线| 亚洲午夜精品一区二区公牛电影院| 国产成人免费a在线视频app| a拍拍男女免费看全片| 成人影片一区免费观看| 综合一区自拍亚洲综合图区| 亚洲字幕在线观看| 亚洲成A人片777777| 成人伊人亚洲人综合网站222| 中文字幕无码不卡免费视频| 日本免费在线观看| 中文字幕av免费专区| 美女视频黄频a免费大全视频| 亚洲自国产拍揄拍| 亚洲视频免费播放| 亚洲国产天堂久久综合网站| 亚洲一区AV无码少妇电影☆| 免费一级毛片正在播放| 女人被免费视频网站| 可以免费看黄视频的网站|