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

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

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

    kapok

    垃圾桶,嘿嘿,我藏的這么深你們還能找到啊,真牛!

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      455 隨筆 :: 0 文章 :: 76 評(píng)論 :: 0 Trackbacks
    http://dev2dev.bea.com.cn/techdoc/wlportal/20031027.html

    簡(jiǎn)介
    頁(yè)面流提供了一種方便構(gòu)建Web應(yīng)用業(yè)務(wù)和導(dǎo)航邏輯的編程模型。為了顯示和修改頁(yè)面流動(dòng)作所收集的數(shù)據(jù),WebLogic Workshop 8.1 數(shù)據(jù)綁定框架將用戶(hù)界面中的NetUI JSP標(biāo)簽綁定到Web應(yīng)用數(shù)據(jù)上。兩者相互結(jié)合為構(gòu)建基于Web的用戶(hù)界面提供了一種令人矚目的開(kāi)發(fā)模型。
    數(shù)據(jù)綁定是一個(gè)重要主題;這里我們將介紹用于綁定、顯示、更新數(shù)據(jù)的表達(dá)式語(yǔ)言和JSP標(biāo)簽;并將演示如何創(chuàng)建一個(gè)簡(jiǎn)單的表單。本文假定讀者對(duì)基本頁(yè)面流和JSP程序設(shè)計(jì)較為熟悉。文中用到的所有代碼都可以從附帶的下載文件Web application (1.4 MB)中獲得。

    參與者
    綁定UI到數(shù)據(jù)的過(guò)程需要三個(gè)參與者--業(yè)務(wù)對(duì)象/數(shù)據(jù)、NetUI JSP標(biāo)簽庫(kù)、表達(dá)式語(yǔ)言。業(yè)務(wù)對(duì)象中含有需要綁定到JSP頁(yè)面的數(shù)據(jù)。JSP標(biāo)簽以特定視圖(只讀或可更新)的方式在Web瀏覽器中繪制數(shù)據(jù),而表達(dá)式語(yǔ)言則將兩者粘合在一起,從而可以通過(guò)JSP標(biāo)簽引用業(yè)務(wù)對(duì)象的屬性。借助三個(gè)參與者的實(shí)例,Workshop開(kāi)發(fā)人員可以用靈活且優(yōu)雅的方式創(chuàng)建用于顯示、更新、及創(chuàng)建數(shù)據(jù)的用戶(hù)界面。
    整篇文章我們都會(huì)用到一個(gè)定義了字段和屬性的JavaBean,屬性更適合說(shuō)明數(shù)據(jù)是如何綁定到不同類(lèi)型之上的。該表單的一部分如下;其中定義了一個(gè)公共屬性name 和一個(gè)公共字段eMail。可以把該類(lèi)看作一個(gè)針對(duì)簡(jiǎn)單Web頁(yè)面的業(yè)務(wù)對(duì)象,該Web頁(yè)面演示了如何綁定到表單的屬性。

    public class Customer
    {
     public String eMail = "";
     private String name;

     public String getName()
     {
     return this.name;
     }
     . . .
     }
                                        [binding/Controller.jpf]

    URL 也是該bean的一個(gè)屬性。除此之外,同一頁(yè)面流中還定義了一個(gè)LocationInfo 類(lèi),它暴露了可以進(jìn)行數(shù)據(jù)綁定的復(fù)雜類(lèi)型。
    為了更快將讀者引進(jìn)門(mén),我們假定代表用戶(hù)"Dave Smith"的Customer對(duì)象已經(jīng)存在,并且可以通過(guò)String類(lèi)型的關(guān)鍵字"customer"在request的屬性映射中進(jìn)行訪問(wèn)。這個(gè)Customer的姓名可以借助JSP的NetUI標(biāo)簽顯示在Web頁(yè)中。
    Customer Name: <netui:label value="{request.customer.name}"/>
                                              [binding/simple.jsp]

    它在Workshop JSP 設(shè)計(jì)器中顯示如下:
    Customer Name: {request.customer.name}

    并生成如下的HTML輸出:
    Customer Name: <span>John Smith</span>

    下面我們將從整體上更進(jìn)一步分析這個(gè)例子和表達(dá)式。

    表達(dá)式語(yǔ)言
    表達(dá)式語(yǔ)言使得Workshop開(kāi)發(fā)人員能夠使用一種簡(jiǎn)單的語(yǔ)法在JSP頁(yè)面中引用業(yè)務(wù)對(duì)象的數(shù)據(jù)。通常,一個(gè)表達(dá)式引用業(yè)務(wù)對(duì)象上的一個(gè)或一系列屬性,從而可以唯一標(biāo)識(shí)JSP標(biāo)簽所綁定的數(shù)據(jù)。在以上例子中,表達(dá)式{request.customer.name}引用Customer JavaBean中的name 屬性,保存在request中的該JavaBean被稱(chēng)作"customer"。
    在JSP標(biāo)簽屬性中,表達(dá)式分別以'{' 和'}'作為開(kāi)始和結(jié)束標(biāo)記。標(biāo)簽探測(cè)一個(gè)屬性是否是表達(dá)式、或者其中是否包含表達(dá)式,從而對(duì)屬性進(jìn)行求值。
    一個(gè)表達(dá)式含有兩個(gè)獨(dú)立的部分--數(shù)據(jù)綁定上下文:在其中進(jìn)行表達(dá)式求值;屬性:它是表達(dá)式求值返回的結(jié)果。在表達(dá)式{request.customer.name}中, request是綁定上下文,它引用JSP頁(yè)面request的屬性映射。表達(dá)式剩下的部分用來(lái)引用唯一的對(duì)象屬性。"customer"標(biāo)識(shí)符用來(lái)在request的屬性映射中查找相關(guān)對(duì)象,name標(biāo)識(shí)符用來(lái)獲取Customer 對(duì)象上的JavaBean 屬性name。從功能上講,該表達(dá)式等同于以下語(yǔ)句:

    String name = ((Customer)request.getAttribute("customer")).getName();

    同樣是引用相同的數(shù)據(jù),表達(dá)式語(yǔ)法更為簡(jiǎn)單。
    除了request 上下文,還可以在其它數(shù)據(jù)綁定上下文中求值表達(dá)式,這些上下文用來(lái)訪問(wèn)Web應(yīng)用和頁(yè)面流環(huán)境的不同部分。綁定上下文還可以引用其它資源,比如通過(guò)url 或 bundle 上下文,它可以分別引用URL參數(shù)或資源包中的國(guó)際化字符串。完整的上下文及其引用對(duì)象/資源的列表如下:

    上下文名稱(chēng) 上下文引用的對(duì)象
    actionForm 和當(dāng)前NetUI 表單標(biāo)簽相關(guān)的動(dòng)作表單
    pageFlow 某個(gè)用戶(hù)的當(dāng)前頁(yè)面流
    globalApp webapp中某個(gè)用戶(hù)的Global.app
    bundle 用于引用聲明或隱含的資源包屬性
    pageContext JSP 頁(yè)面的PageContext屬性映射
    request request的屬性映射
    session session的屬性映射
    application servlet上下文的屬性映射
    url 用于當(dāng)前請(qǐng)求的URL 查詢(xún)參數(shù)
    container 當(dāng)使用重復(fù)標(biāo)簽繪制某個(gè)數(shù)據(jù)集時(shí),復(fù)雜數(shù)據(jù)綁定標(biāo)簽用它來(lái)訪問(wèn)當(dāng)前條目

    現(xiàn)在進(jìn)一步討論上表中提到的一些上下文。
    同樣是使用表達(dá)式,仍然存在多種不同方法來(lái)引用同一對(duì)象的同一屬性。例如,在我們的例子中,以下幾個(gè)表達(dá)式都是等價(jià)的:

    - request["customer"]["name"]
    - request.customer.name
    - request["customer"].name
    - request.customer["name"]
                             [binding/index.jsp]

    而且,表達(dá)式既可以訪問(wèn)字段,也可以訪問(wèn)屬性,這些屬性返回任意基本類(lèi)型或Java Object類(lèi)型,也可以返回它們的數(shù)組、列表和映射類(lèi)型。一般說(shuō)來(lái),屬性命名遵循JavaBean屬性的setter和getter方法命名規(guī)范。關(guān)于暴露、命名、引用數(shù)據(jù)綁定對(duì)象屬性的特殊規(guī)則將在下面進(jìn)行討論。
    注意:對(duì)象的值既可以是只讀的也可以是可讀/寫(xiě)的;對(duì)象對(duì)應(yīng)的值的暴露方式?jīng)Q定了它對(duì)于表達(dá)式僅是只讀的,還是當(dāng)Web瀏覽器向服務(wù)器提交數(shù)據(jù)時(shí)該值是可更新的。

    訪問(wèn)屬性
    為了識(shí)別類(lèi)暴露的可綁定數(shù)據(jù)屬性,表達(dá)式語(yǔ)言采用了JavaBean命名規(guī)范。符合以下條件的方法可以暴露一個(gè)只讀屬性:

    - public 訪問(wèn)權(quán)限
    - 返回非void類(lèi)型
    - 無(wú)參數(shù)
    - 以"get"作為名稱(chēng)的開(kāi)頭

    可以使用表達(dá)式來(lái)引用數(shù)據(jù)綁定上下文中符合以上條件的任意方法。JavaBean屬性的名稱(chēng)被包含在表達(dá)式中。例如,類(lèi)中定義了一個(gè)屬性:

    public String getName();
                     [binding/index.jsp]
    [binding/Controller.jpf]

    在表達(dá)式中它被引用為:

    {request.customer.name}
                     [binding/index.jsp]
    [binding/index.jsp]

    前提是一個(gè)Customer 對(duì)象被指定為“customer”并可以從request中得到。

    在本例中,方法 getName 對(duì)應(yīng)名為name的JavaBean屬性;這是通過(guò)去掉“get”并將第一個(gè)字符變成小寫(xiě)之后得到的。一個(gè)例外是如果“get”之后的頭兩個(gè)字符都是大寫(xiě)的,JavaBean屬性的名稱(chēng)將在表達(dá)式中保持不變。例如,屬性:

    public String getURL();
                     [binding/index.jsp]
    [binding/Controller.jpf]

    在表達(dá)式中被引用為:

    {request.customer.URL}
                     [binding/index.jsp]
    [binding/index.jsp]

    迄今為止,以上的name 和URL 屬性都是只讀的,因?yàn)槲覀儧](méi)有為它們定義setter方法,該方法可以用來(lái)更新對(duì)象的屬性值。一個(gè)JavaBean的setter方法需要符合以下條件:

    - 以"set"作為名稱(chēng)開(kāi)頭
    - 返回void類(lèi)型
    - 只有一個(gè)參數(shù),它的類(lèi)型與對(duì)應(yīng)getter方法的返回類(lèi)型相同

    前面兩個(gè)屬性的JavaBean setter如下:

    public void setName(String name);
    public void setURL(String url);
                       [binding/index.jsp]
    [binding/Controller.jpf]

    如果對(duì)象中同時(shí)存在正確定義的getter 和setter,屬性就是可讀/寫(xiě)的。這種類(lèi)型的屬性十分重要,因?yàn)榭梢詮腤eb頁(yè)面更新它們的值。

    訪問(wèn)字段

    可以通過(guò)表達(dá)式訪問(wèn)公共字段。上面Customer類(lèi)中定義的“eMail”字段就是一個(gè)例子。公共字段總是可讀/寫(xiě)的。Customer的email地址在Web頁(yè)中可以顯示為:

    <netui:label value="{request.customer.eMail}"/>
                            [binding/index.jsp]
    [binding/Controller.jpf]

    訪問(wèn)數(shù)組或列表中的元素

    使用常用的[index] 語(yǔ)法可以引用數(shù)組或列表中的條目。如果一個(gè)屬性被暴露為:

    public String[] getZipArray();
    [binding/Controller.jpf]
    [binding/index.jsp]

    那么可以通過(guò)以下表達(dá)式訪問(wèn)數(shù)組的第四個(gè)條目:

    {request.locationInfo.zipArray[3]}
    [binding/index.jsp]
    [binding/index.jsp]

    假定LocationInfo對(duì)象可以在request中通過(guò)關(guān)鍵字“l(fā)ocationInfo”進(jìn)行訪問(wèn),

    如果一個(gè)屬性被暴露為:

    public List getZipList();
                   [binding/index.jsp]
    [binding/Controller.jpf]

    那么以下表達(dá)式將會(huì)訪問(wèn)列表中的第四個(gè)條目:

    {request.locationInfo.zipList[3]}
    [binding/index.jsp]
    [binding/index.jsp]

    此類(lèi)表達(dá)式求值還是略有不同。如果該表達(dá)式在一個(gè)長(zhǎng)度僅為2的String[]上被求值,因?yàn)閿?shù)組的長(zhǎng)度小于表達(dá)式的引用長(zhǎng)度,所以將會(huì)發(fā)生錯(cuò)誤。如果屬性是列表類(lèi)型,表達(dá)式將被簡(jiǎn)單地求值為null。

    使用NetUI Repeater標(biāo)簽集可以方便地繪制數(shù)組和列表。稍候一篇dev2dev文章將會(huì)涉及該標(biāo)簽集以及“container”綁定上下文。

    訪問(wèn)映射中的元素

    表達(dá)式還可以采用與訪問(wèn)屬性相同的語(yǔ)法來(lái)引用映射中特定鍵值對(duì)應(yīng)的條目。例如,如果LocationInfo 類(lèi)暴露了一個(gè)含有州名縮寫(xiě)和州名的Map,并將其定義為帶有JavaBean getter方法的可綁定數(shù)據(jù)屬性:

    public Map getAbbrevMap();
                            [binding/index.jsp]
    [binding/Controller.jpf]

    那么,以下兩個(gè)表達(dá)式都可以使用鍵值“CO”在映射中進(jìn)行查找:

    {request.locationInfo.abbrevMap.CO}
    {request.locationInfo.abbrevMap["CO"]}
                        [binding/index.jsp]
    [binding/index.jsp]

    訪問(wèn)基本類(lèi)型

    采用以上任何機(jī)制暴露的數(shù)據(jù)類(lèi)型可以是Java對(duì)象或基本類(lèi)型。如果某個(gè)屬性或字段的類(lèi)型是基本類(lèi)型,比如int 或 boolean ,表達(dá)式的求值結(jié)果將是基本類(lèi)型的Java對(duì)象包裝器。在本例中,將分別是Integer 和 Boolean。

    表達(dá)式和NetUI JSP標(biāo)簽

    在NetUI JSP標(biāo)簽上使用表達(dá)式、屬性可以引用業(yè)務(wù)對(duì)象屬性,并將數(shù)據(jù)顯示在Web頁(yè)面上。同一屬性的顯示方式取決于標(biāo)簽的選擇。比如,綁定到NetUI label的字符串屬性是只讀的,而綁定到NetUI form內(nèi)NetUI text box的字符串屬性卻是可讀/寫(xiě)的。

    目前存在三個(gè)NetUI標(biāo)簽庫(kù)——HTML、復(fù)雜數(shù)據(jù)綁定、模板,本文不涉及后面兩個(gè)。HTML標(biāo)簽集盡可能遵循HTML4.01規(guī)范并將自己的標(biāo)簽和HTML中定義的元素相互結(jié)合。例如,textBox、 checkBox、 和radioButton 標(biāo)簽分別顯示HTML輸入標(biāo)簽類(lèi)型“text”、 “checkbox”、 和“radio”。可以在Workshop標(biāo)簽面板中找到這些標(biāo)簽。



    也可以在Workshop 8.1的Insert菜單中找到這些標(biāo)簽。

    NetUI HTML 標(biāo)簽進(jìn)一步可以分為兩類(lèi)——只能顯示數(shù)據(jù)的標(biāo)簽(或稱(chēng)為只讀的)、能夠在服務(wù)器和Web瀏覽器之間“往返”的標(biāo)簽(或稱(chēng)為可讀/寫(xiě)的)。可以使用諸如netui:form 內(nèi)的textBox這類(lèi)標(biāo)簽在服務(wù)器和客戶(hù)端之間傳遞數(shù)據(jù)。關(guān)于此類(lèi)標(biāo)簽如何綁定數(shù)據(jù),彼此之間也存在不同。

    只讀NetUI標(biāo)簽

    只讀標(biāo)簽使用表達(dá)式綁定屬性“value”來(lái)指定在頁(yè)面中繪制的數(shù)據(jù)。此類(lèi)標(biāo)簽只是簡(jiǎn)單地通過(guò)表達(dá)式從業(yè)務(wù)對(duì)象中讀取數(shù)值并在Web頁(yè)面上繪制,可能還會(huì)對(duì)輸出結(jié)果進(jìn)行格式處理。我們已經(jīng)知道netui:label 標(biāo)簽可以在頁(yè)面上繪制表達(dá)式的值,其實(shí)它也可以繪制普通文本:

    <netui:label value="Blue"/>
                          [binding/index.jsp]
    [binding/index.jsp]

    因?yàn)閘abel標(biāo)簽不是到服務(wù)器的可往返標(biāo)簽,所以它的value屬性可以是文本和表達(dá)式的組合。例如,想要顯示用反斜杠分開(kāi)的客戶(hù)姓名和年齡,可以這樣使用label:

    <netui:label value="{request.customer.age} / {request.customer.age}"/>
                                           [binding/index.jsp]
    [customerEntry/display.jsp]

    每個(gè)表達(dá)式都將被求值,文本“/”將會(huì)混合到表達(dá)式結(jié)果中。


    可讀/寫(xiě)NetUI標(biāo)簽

    第二組標(biāo)簽使用“dataSource”屬性,它們比較特殊因?yàn)楸弧癲ataSource”屬性引用的數(shù)據(jù)可以在Web瀏覽器和服務(wù)器之間往返。盡管dataSource屬性可以綁定表達(dá)式,但該屬性的value必須是一個(gè)純粹的表達(dá)式。與label標(biāo)簽的value屬性不同,dataSource屬性不能混合文本和表達(dá)式,因?yàn)閐ataSource屬性的value被用在兩個(gè)地方:

    - 繪制JSP頁(yè)面的時(shí)候通過(guò)表達(dá)式讀取值
    - 當(dāng)表單所在頁(yè)面POST的時(shí)候,通過(guò)同一個(gè)表達(dá)式將值寫(xiě)回到業(yè)務(wù)對(duì)象中去。

    采取這種方式,諸如textBox這樣的標(biāo)簽就可以在服務(wù)器和Web瀏覽器之間來(lái)回傳輸數(shù)據(jù)。
    如果在dataSource 屬性中混合使用文本,屬性就不是一個(gè)純粹的表達(dá)式并將報(bào)錯(cuò)。因?yàn)閐ataSource 屬性通常被用于同數(shù)據(jù)庫(kù)交換數(shù)據(jù),所以這里使用的表達(dá)式必須引用那些可以更新的數(shù)據(jù)綁定上下文,它們是actionForm、pageFlow、和 globalApp。 除此以外,所有其它綁定上下文在數(shù)據(jù)被POST到服務(wù)器時(shí)都是只讀的。

    一個(gè)簡(jiǎn)單例子
    讓我們對(duì)前面的Customer例子稍作修改并利用NetUI編寫(xiě)一個(gè)“Hello World”,從而形成一個(gè)實(shí)用的例子。本例中含有一個(gè)頁(yè)面流simpleForm 和一個(gè)JSP。JSP定義了一個(gè)綁定到頁(yè)面流中某個(gè)action的NetUI表單。當(dāng)表單從瀏覽器中POST的時(shí)候,動(dòng)作表單將被創(chuàng)建,提交的數(shù)據(jù)將被添加到動(dòng)作表單中。接著,輸入頁(yè)面被刷新,剛剛在只讀label中顯示的信息將會(huì)顯示到可編輯的文本框中。這里所說(shuō)的頁(yè)面流是指本文示例應(yīng)用中的simpleForm。

    首先我們來(lái)看看動(dòng)作表單,它們負(fù)責(zé)封裝那些在頁(yè)面中被顯示并更新的數(shù)據(jù)。該類(lèi)定義了通過(guò)NetUI HTML在JSP表單標(biāo)簽內(nèi)可編輯的屬性;它暴露了唯一一個(gè)屬性——message。

    public static class MessageForm extends FormData
    {
      private String message;

      public void setMessage(String message)
      {
       this.message = message;
      }

      public String getMessage()
      {
      return this.message;
      }
    }
                    [binding/index.jsp]
    [simpleForm/Controller.jpf]

    接著我們來(lái)看看JSP頁(yè)面。這里的netui:form 標(biāo)簽用于引用在表單POST時(shí)將會(huì)執(zhí)行的頁(yè)面流動(dòng)作。如果您對(duì)頁(yè)面流不熟悉,請(qǐng)參閱參考材料部分的頁(yè)面流參考手冊(cè)。一般來(lái)說(shuō),從可讀/寫(xiě)NetUI標(biāo)簽POST到服務(wù)器的更新必須在NetUI form 標(biāo)簽中進(jìn)行。

    <netui:form action="echoMessage" focus="">
     <table>
      <tr>
       <td>Current message:</td>
       <td><netui:label value="{actionForm.message}"/></td>
      </tr>
     <tr><td colspan="2"> </td></tr>
     <tr>
       <td><netui:label value="Message:"/></td>
       <td><netui:textBox dataSource="{actionForm.message}"/></td>
     </tr>
    </table>
    <netui:button value="echoMessage"/>
    </netui:form>
                                          [binding/index.jsp]
    [simpleForm/index.jsp]

    JSP中有兩個(gè)附加NetUI標(biāo)簽;其中netui:textBox 利用表達(dá)式{actionForm.message}在當(dāng)前動(dòng)作表單中顯示message的值。最初該值以及textBox都是空的。還有一個(gè)button標(biāo)簽用來(lái)把表單提交到服務(wù)器。運(yùn)行例子的時(shí)候,請(qǐng)?jiān)谖谋究蛑休斎搿癏ello World”并按下“Submit”。

    看!當(dāng)表單提交到服務(wù)器時(shí),頁(yè)面流生命周期創(chuàng)建了接收POST數(shù)據(jù)(即本例中的message)的動(dòng)作表單。因?yàn)閠extBox的dataSource 屬性對(duì)應(yīng)的表達(dá)式被映射為HTML輸入標(biāo)簽——{actionForm.message},所以message的值被路由到該屬性上。

    一旦表單填充完畢,postback 動(dòng)作就會(huì)執(zhí)行并在頁(yè)面中重新繪制相同的表單。運(yùn)行結(jié)果是:表達(dá)式{actionForm.message} 現(xiàn)在同時(shí)指向label和textBox 中顯示的“Hello World”。在文本框中輸入文本并重新提交表單可以修改該值。

    技巧和經(jīng)驗(yàn)

    如何訪問(wèn)頁(yè)面流的成員屬性?

    頁(yè)面流可以像其它類(lèi)一樣暴露JavaBean屬性;利用表達(dá)式和pageFlow 綁定上下文可以綁定這些屬性。例如,如果一個(gè)頁(yè)面流用以下方法暴露屬性productName:

    public String getProductName()
    {
    return productName;
    }
                            [binding/index.jsp]
    [howdoi/Controller.jpf]

    就可以通過(guò)以下表達(dá)式在JSP中進(jìn)行數(shù)據(jù)綁定:

    {pageFlow.productName}
                               [binding/index.jsp]
    [howdoi/index.jsp]

    你還可以綁定到頁(yè)面流暴露的公共字段。

    應(yīng)該在頁(yè)面流上暴露映射嗎?
    在任何可以接受POST數(shù)據(jù)的數(shù)據(jù)綁定上下文中暴露Map類(lèi)型都是危險(xiǎn)的。問(wèn)題在于映射可以變得很大,這就在服務(wù)上開(kāi)了一個(gè)安全漏洞:因?yàn)榫W(wǎng)頁(yè)可以直接POST數(shù)據(jù)到Map,這將會(huì)導(dǎo)致map無(wú)限變大、消耗掉可觀的服務(wù)器資源。
    通過(guò)類(lèi)似request這樣的只讀數(shù)據(jù)綁定上下文來(lái)暴露Map類(lèi)型要安全很多。上面的例子中,LocationInfo對(duì)象通過(guò)abbrevMap 屬性實(shí)現(xiàn)了這點(diǎn)。

    如果在表單上暴露一個(gè)int 類(lèi)型的屬性,從頁(yè)面POST出去的是什么類(lèi)型?

    當(dāng)JSP頁(yè)面POST數(shù)據(jù)到服務(wù)器時(shí),所有的數(shù)據(jù)都以字符串形式到達(dá)。應(yīng)用POST數(shù)據(jù)到頁(yè)面流屬性或動(dòng)作表單的過(guò)程中,NetUI會(huì)設(shè)法把已經(jīng)POST到底層屬性或字段的字符串?dāng)?shù)據(jù)轉(zhuǎn)換為原有的類(lèi)型。
    例如,如果動(dòng)作表單暴露一個(gè)類(lèi)型為int、名稱(chēng)為 age 的屬性,并且該字段可以從NetUI表單更新,類(lèi)型轉(zhuǎn)換工作即是把String 類(lèi)型的“42”的轉(zhuǎn)換成int 類(lèi)型的42。如果轉(zhuǎn)換失敗,失敗信息將會(huì)顯示在運(yùn)行WebLogic的命令提示窗口中。


    如何顯示一個(gè)數(shù)據(jù)列表或數(shù)組?

    利用NetUI復(fù)雜數(shù)據(jù)綁定標(biāo)簽可以繪制諸如列表、數(shù)組、映射、和行集這類(lèi)的數(shù)據(jù)集。這些將在接下來(lái)的dev2dev文章中討論。


    表達(dá)式求值失敗會(huì)怎樣?
    當(dāng)JSP準(zhǔn)備繪制時(shí),如果一個(gè)表達(dá)式求值失敗了,JSP頁(yè)面上將會(huì)顯示一個(gè)失敗信息。假定有屬性綁定的例子:

    Customer Name: <netui:label value="{request.customer.name}"/>
                                         [binding/index.jsp]
    [binding/index.jsp]

    如果request的屬性映射中不包含名為“customer”的對(duì)象,那么綁定將會(huì)失敗,因?yàn)閚ame屬性無(wú)法訪問(wèn)null對(duì)象。請(qǐng)嘗試將例子改為:

    Customer Name:
                                        [binding/index.jsp]
    [binding/index.jsp]

    這樣就可以知道表達(dá)式求值是如何失敗的了。

    Workshop 8.1 IDE如何幫我進(jìn)行數(shù)據(jù)綁定?

    Workshop可以用多種方式幫助JSP作者進(jìn)行數(shù)據(jù)綁定,其中最重要的一種是通過(guò)數(shù)據(jù)面板。使用數(shù)據(jù)面板可以在JSP頁(yè)面中創(chuàng)建能夠顯示或更新數(shù)據(jù)的NetUI標(biāo)簽。

    例如,在Workshop中打開(kāi)JSP頁(yè)面howdoi/index.jsp;在頁(yè)面上,數(shù)據(jù)面板顯示如下:


    您可以看見(jiàn)productName屬性在面板中是可用的。如果拖動(dòng)它到JSP頁(yè)面中,以下代碼將被生成并將在頁(yè)面中顯示產(chǎn)品名稱(chēng):

    <netui:label value="{pageFlow.productName}"></netui:label>

    試著添加其它屬性到頁(yè)面流中并拖動(dòng)它們到JSP頁(yè)面中,從而生成可以顯示數(shù)據(jù)的NetUI標(biāo)簽。


    如果頁(yè)面上有動(dòng)作表單,它上面的屬性也可以被拖動(dòng)到JSP上。


    結(jié)論
    本文覆蓋的范圍很廣。現(xiàn)在重新回顧一下,表達(dá)式語(yǔ)言使得NetUI JSP能夠引用業(yè)務(wù)對(duì)象暴露的數(shù)據(jù)、頁(yè)面流、以及數(shù)據(jù)綁定上下文暴露的其它對(duì)象和資源。表達(dá)式可以引用這些對(duì)象的屬性和字段,并且NetUI HTML標(biāo)簽既可以用于顯示數(shù)據(jù),也可以用于從Web瀏覽器更新數(shù)據(jù)。

    本文附帶的應(yīng)用程序包含多個(gè)示例,其中包括基本數(shù)據(jù)綁定規(guī)則的例子、Hello World例子、和一個(gè)創(chuàng)建、顯示、和編輯Customer對(duì)象的復(fù)雜例子。

    在以后的文章中我們還會(huì)介紹更多的內(nèi)容,希望本文使您對(duì)WebLogic Workshop 8.1的從UI到數(shù)據(jù)的綁定有了初步了解。

    posted on 2005-05-20 10:13 笨笨 閱讀(622) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): J2EEALLWeblogic Portal
    主站蜘蛛池模板: 久9久9精品免费观看| 亚洲一卡2卡4卡5卡6卡在线99| yy6080亚洲一级理论| 又大又硬又爽免费视频| 成全视频免费高清| 成人免费毛片观看| 女人张开腿给人桶免费视频 | 亚洲一区二区三区免费视频| 78成人精品电影在线播放日韩精品电影一区亚洲 | 亚洲精品成人久久| 伊人久久综在合线亚洲2019| 无码欧精品亚洲日韩一区夜夜嗨 | 久久亚洲av无码精品浪潮| 成**人免费一级毛片| 67194成手机免费观看| 国内精品免费视频精选在线观看| jizz中国免费| 亚洲精品视频免费| 一级黄色毛片免费看| 日本视频免费观看| 美女视频黄a视频全免费网站色 | 波多野结衣免费一区视频| 久久国产乱子伦精品免费午夜 | 91免费资源网站入口| 欧美a级成人网站免费| 男人的好看免费观看在线视频| 在线观看免费人成视频色9| 97性无码区免费| 啦啦啦www免费视频| 日本高清免费不卡在线| 国产日产成人免费视频在线观看| 国产小视频在线免费| 亚洲国产一区明星换脸| 亚洲一区二区三区AV无码| 亚洲精品国产字幕久久不卡| 久久久亚洲精品国产| 亚洲免费二区三区| 亚洲欧美日韩综合俺去了| 国产精品亚洲专区无码唯爱网| 高h视频在线免费观看| 中国一级全黄的免费观看|