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

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

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

    爪哇一角

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

    四 JSF轉(zhuǎn)換器

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

    1.JSF轉(zhuǎn)換器的應(yīng)用

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

    JSF定義了一系列標(biāo)準(zhǔn)的轉(zhuǎn)換器(Converter),對(duì)于基本資料型態(tài) (primitive type)或是其Wrapper類別,

    JSF會(huì)使用

    javax.faces.Boolean、

    javax.faces.Byte、

    javax.faces.Character、

    javax.faces.Double、

    javax.faces.Float、

    javax.faces.Integer、

    javax.faces.Long、

    javax.faces.Short等自動(dòng)進(jìn)行轉(zhuǎn)換,對(duì)于BigDecimal、BigInteger,則會(huì)使用javax.faces.BigDecimal、javax.faces.BigInteger自動(dòng)進(jìn)行轉(zhuǎn)換。

    DateTime、Number,我們可以使用<f:convertDateTime>、<f:convertNumber>標(biāo)簽進(jìn)行轉(zhuǎn)換。

     

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

    例:

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

    package test;

    import java.util.Date;

    //JSF的轉(zhuǎn)換器示例

    public class JsfCoverter {

           private Date date = new Date();

        public Date getDate() {

            return date;

        }

        public void setDate(Date date) {

            this.date = date;

        }

    }

     

    再建立一個(gè)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>轉(zhuǎn)換器示范</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類型的信息,但是和這個(gè)字段綁定的是一個(gè)Date變量(jsfcover.date),

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

    如果轉(zhuǎn)換出錯(cuò)的話,<h:message>則會(huì)顯示錯(cuò)誤信息。

     

    當(dāng)然,我們還需要配置定義的Bean,以及設(shè)子頁面的跳轉(zhuǎn),才能正常運(yùn)行。

    <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轉(zhuǎn)換器 -->

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

     

    啟動(dòng)Tomcat,就可以運(yùn)行了http://localhost:8080/jsfTest/pages/jsfCoverter.faces

    具體程序參看示例程序.

     

    2.自定義JSF轉(zhuǎn)換器

    除了使用標(biāo)準(zhǔn)的轉(zhuǎn)換器之外,您還可以自行定制您的轉(zhuǎn)換器,您可以實(shí)作javax.faces.convert.Converter接口,這個(gè)接口有兩個(gè)要實(shí)作的方法:

    public Object getAsObject(FacesContext context,

                               UIComponent component,

                               String str);

     public String getAsString(FacesContext context,

                               UIComponent component,

                               Object obj);

    簡(jiǎn)單的說,第一個(gè)方法會(huì)接收從客戶端經(jīng)由HTTP傳來的字符串?dāng)?shù)據(jù),您在第一個(gè)方法中將之轉(zhuǎn)換為您的自訂對(duì)象,這個(gè)自訂對(duì)象將會(huì)自動(dòng)設(shè)定給您指定的Bean對(duì)象;

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

     

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

    但是很多項(xiàng)目需要將用戶輸入的或者檢索的不規(guī)則的Date格式統(tǒng)一化,這就需要用戶自己定義一個(gè)共通的轉(zhuǎn)換器了。

     

    首先建立一個(gè)轉(zhuǎn)換器,它要實(shí)現(xiàn)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,

    頁面輸入信息的轉(zhuǎn)換

     
                         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, "日期格式錯(cuò)誤", "日期格式錯(cuò)誤");

                         throw new ConverterException(facesMessage);

    頁面顯示信息的轉(zhuǎn)換

     
                  }

           }

           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;

           }

    }

     

    同時(shí)定義表示頁面jsfMyCoverter.jsp.

    別忘記faces-config.xml中完成注冊(cè):

    <!-- 自定義轉(zhuǎn)換器 -->

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

     

    <!-- 自定義轉(zhuǎn)換器 -->

        <converter>

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

            <converter-class>

                test.jsfMyCoverter

            </converter-class>

        </converter>

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

    具體程序參看示例程序。

     

    主站蜘蛛池模板: 九九久久国产精品免费热6| 亚洲18在线天美| 亚洲综合视频在线| 亚洲AV无码乱码在线观看代蜜桃| 亚洲人成网站看在线播放| 亚洲成AV人片高潮喷水| 国产精品美女久久久免费| 男的把j放进女人下面视频免费| 57pao一国产成视频永久免费 | 久久亚洲色WWW成人欧美| 一级毛片在播放免费| 日韩电影免费观看| 黄色片在线免费观看| 免费大黄网站在线观看| 国产aⅴ无码专区亚洲av| 亚洲中文无码亚洲人成影院| 人体大胆做受免费视频| 18禁止看的免费污网站| 国产精品极品美女免费观看| 亚洲国产精品一区二区成人片国内| 亚洲成a人不卡在线观看| 美女被免费网站视频在线| 日韩免费观看一区| 国产在线19禁免费观看| 亚洲国产天堂久久综合网站 | 久久久亚洲精品无码| 久久亚洲精品国产亚洲老地址 | 日本免费观看网站| 亚洲中文字幕无码久久2017| 亚洲国产精品综合一区在线 | 中美日韩在线网免费毛片视频 | 男女拍拍拍免费视频网站| 青娱分类视频精品免费2| 自拍偷自拍亚洲精品第1页| 亚洲国产最大av| 国产免费人成视频在线播放播| 久久九九兔免费精品6| 亚洲精品一级无码中文字幕| 亚洲国产精品综合一区在线| 91视频免费网站| 国产美女无遮挡免费视频网站 |