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

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

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

    隨筆 - 3, 文章 - 0, 評(píng)論 - 12, 引用 - 0
    數(shù)據(jù)加載中……

    2008年2月22日

    IoVC的組件屬性綁定----@Bind

    組件屬性綁定

        我所接觸到的基于JSF的Web應(yīng)用中,位于UI界面上的一個(gè)界面元素或組件,想要顯示數(shù)據(jù),通常的寫法是這樣:
    greeting.xhtml
    <h:inputText value="#{demo.helloduke.UserBean.name}"/>

    demo.helloduke.UserBean.java:
    @ManagedBean(name="demo.helloduke.UserBean", scope=ManagedBeanScope.SESSION)
    public class UserBean {
        
    private String name;
        
    public String getName() {
            
    return name;
        }
        
    public void setName(String name) {
            
    this.name = name;
        }
    }

    這樣的寫法意味著,在greeting.xhtml中,需要知道UserBean的存在,并且需要知道UserBean的name屬性是對(duì)應(yīng)著這個(gè)inputText組件的value。這在很大程度上,限制了greeting.xhtml的作用范圍,使這個(gè)UI完全沒有機(jī)會(huì)被重用。很長(zhǎng)一段時(shí)間,這都是困照著我的一個(gè)問題。

    Binding是IoVC包含的一個(gè)重要特性,它不僅可以使UI獨(dú)立出來,而且Binding是采用后期綁定模式實(shí)現(xiàn),為組件的無狀態(tài)的實(shí)現(xiàn)提供了底層基礎(chǔ)支撐。關(guān)于IoVC的實(shí)現(xiàn)方式,在這篇隨筆中并不過多討論。
    在IoVC的編程模式下,對(duì)UI上的界面元素的控制力被轉(zhuǎn)移到了ManagedBean中,UI不需要關(guān)心誰在使用它,以及數(shù)據(jù)的來源。
    IoVC模式的Hello Duke的UI及managedBean:
    greeting.xhtml
    <h:inputText id="name"/>

    demo.helloduke.UserBean.java:
    @ManagedBean(name="demo.helloduke.UserBean", scope=ManagedBeanScope.SESSION)
    public class UserBean {
        @Bind
        
    private String name;
    }

    @Bind標(biāo)簽,提供了將ManagedBean的filed綁定到組件的attributes中的能力,默認(rèn)情況下,@Bind根據(jù)所作用的filed的name來匹配UI中的元素的id,然后將field的值取出綁定到對(duì)應(yīng)的UI中的組件上,上述代碼表示,將UserBean中的name屬性,綁定到與之對(duì)應(yīng)的inputText組件的value中。

    下面列出了@Bind標(biāo)簽的典型使用場(chǎng)景:

        @Bind
        
    private UIDataGrid grid;

        @Bind(id
    ="grid", attribute="width")
        
    private int width;

        @Bind(id
    ="grid", attribute="height")
        
    private int height;

        
    public void initGrid() {
            
    this.width = 500;
            
    this.height = 400;
        }

        
    public void reload() {
            
    this.grid.reload();
        }

    使用@Bind標(biāo)簽將組件的attributes與ManagedBean中的屬性一一綁定起來之后,在UI上如果組件發(fā)生變化,其變化了的屬性會(huì)反映到ManagedBean中,同樣,在ManagedBean中,如果更改了屬性值,UI組件也會(huì)發(fā)生相應(yīng)的變化。
    一個(gè)使用IoVC模式的完整頁面與ManagedBean(其中涉及到的其他標(biāo)簽,會(huì)在后面介紹到):
    運(yùn)行效果:


    calc.xhtml
    <?xml version="1.0" encoding="UTF-8"?>
    <f:view xmlns:f="http://java.sun.com/jsf/core"
            xmlns
    ="http://www.w3.org/1999/xhtml"
            xmlns:h
    ="http://java.sun.com/jsf/html"
            xmlns:w
    ="http://www.apusic.com/jsf/widget"
            renderKitId="AJAX">
      <w:page title="View Binding Example">
      
    <h:form>
        
    <h:panelGrid columns="1">
          
    <h:inputText id="first"/>
          
    <h:inputText id="second"/>
          
    <h:outputText id="result"/>
        
    </h:panelGrid>
        
    <h:commandButton value="+" id="add"/>
        
    <h:commandButton value="-" id="subtract"/>
        
    <h:commandButton value="*" id="multiply"/>
        
    <h:commandButton value="/" id="divide"/>
      
    </h:form>
      
    <h:messages/>
      
    </w:page>
    </f:view>
    CalcBean.java:
    @ManagedBean(scope=ManagedBeanScope.SESSION)
    public class CalcBean
    {
        @Bind
        private double first = 10;

        @Bind
        private double second = 20;

        @Bind
        private double result;

        @Bind(id
    ="result", attribute="style")
        
    private String style;

        @Action
        
    public void add() {
            result 
    = first + second;
            style 
    = "color:red";
        }

        @Action
        
    public void subtract() {
            result 
    = first - second;
            style 
    = "color:green";
        }

        @Action
        
    public void multiply() {
            result 
    = first * second;
            style 
    = "color:blue";
        }

        @Action
        
    public void divide() {
            result 
    = first / second;
            style 
    = "color:black";
        }
    }




    posted @ 2008-02-24 23:03 張旭 閱讀(1350) | 評(píng)論 (6)編輯 收藏

    什么是IoVC

    什么是IoVC

        IoVC是Inversion of View Control的縮寫,意思是視圖反轉(zhuǎn)控制,是AOM的核心特性之一,IoVC實(shí)現(xiàn)了將對(duì)UI的控制力轉(zhuǎn)移到ManagedBean中,UI完全不關(guān)心誰會(huì)來使用它本身,也不需要關(guān)心在上面所展現(xiàn)的數(shù)據(jù)內(nèi)容是什么,從而實(shí)現(xiàn)了UI與控制邏輯的完全分離,簡(jiǎn)言之,IoVC是一種更高層次的MVC。

        初一看,IoVC好像也沒什么特別的,甚至有點(diǎn)概念炒作的嫌疑,但是真正使用它、理解它之后,你會(huì)發(fā)現(xiàn),它所提供的編程模型為你的開發(fā)帶來了實(shí)質(zhì)性的幫助。

    IoVC帶來了什么

        IoVC提供了“綁定”、“多語言支持”、“資源注入”、“邏輯事件”等特性,這些特性主要作用在ManagedBean上面,ManagedBean是位于UI與業(yè)務(wù)服務(wù)之間的協(xié)調(diào)者,基于這些特性,在ManagedBean中,一方面可以對(duì)UI實(shí)現(xiàn)完全的控制,另一方面,可以靈活自然的與業(yè)務(wù)服務(wù)進(jìn)行交互。

    托管Bean的簡(jiǎn)化

        傳統(tǒng)方式中,編寫一個(gè)ManagedBean,需要編寫faces-config.xml文件,例如編寫兩個(gè)ManagedBean,UserBean與DepartmentBean,其中UserBean需要引用DepartMentBean,需要采用下面的方式來聲明faces-config.xml文件:
      <managed-bean>
        
    <managed-bean-name>DepartmentBean</managed-bean-name>
        
    <managed-bean-scope>session</managed-bean-scope>
        
    <managed-bean-class>demo.DepartmentBean</managed-bean-class>
      
    </managed-bean>

      
    <managed-bean>
        
    <managed-bean-name>UserBean</managed-bean-name>
        
    <managed-bean-scope>session</managed-bean-scope>
        
    <managed-bean-class>demo.UserBean</managed-bean-class>
        
    <managed-property>
          
    <property-name>departmentBean</property-name>
          
    <property-class>demo.DepartmentBean</property-class>
          
    <value>#{DepartmentBean}</value>
        
    </managed-property>
      
    </managed-bean>

        IoVC提供了@ManagedBean、@ManagedProperty、@MapEntries、@ListEntries等關(guān)于ManagedBean定義的一整套完整的標(biāo)簽,上面的定義,在IoVC中將會(huì)轉(zhuǎn)變?yōu)槿缦路绞街苯勇暶髟诖a中,無需維護(hù)faces-config.xml文件:
    @ManagedBean
    public class DepartmentBean
    {
        
    }

    @ManagedBean
    public class UserBean
    {
        @ManagedProperty(
    "#{DepartmentBean}")
        
    private DepartmentBean departmentBean;
        
    }

    關(guān)于IoVC剩余的幾個(gè)特性的支持的描述,我將會(huì)陸續(xù)寫一些文章來進(jìn)行深入介紹。

    在把“IoVC是什么、IoVC能夠做什么”這些基本問題解釋清楚后,我計(jì)劃探討一下“IoVC是怎么實(shí)現(xiàn)的?”,以及“為什么有了IoVC之后,組件的無狀態(tài)就可以變成可能?”等問題。

    綁定(Binding)

      

    資源注入 (Injection)

      

    多語言支持

       

    邏輯事件

       

    “無狀態(tài)組件”的傳說

    posted @ 2008-02-24 01:15 張旭 閱讀(1808) | 評(píng)論 (3)編輯 收藏

    記AOM2.0M1發(fā)布

        以這樣一篇文章作為我Blog的開篇,也算是具有一些紀(jì)念意義吧。

        AOM從1.2Release是去年12月30日發(fā)布的,到現(xiàn)在已經(jīng)2個(gè)多月了,這期間(包括AOM1.2Release發(fā)布之前),我們一直在進(jìn)行AOM2.0的研發(fā),經(jīng)歷了幾次Preview版本之后,終于決定推出AOM2.0。

        這是一個(gè)跨越式的版本,2.0與1.x的差別,以致到了無法兼容1.x的程度,這是我們?cè)O(shè)計(jì)上的失誤,但是我欣慰的是在2.0將是一個(gè)基線式的版本,后續(xù)發(fā)展到3.x、4.x也會(huì)是兼容2.x的,這在我看來,也未嘗都是壞事。
        
        回顧在1.x中,組件的貧乏、過快的節(jié)奏、市場(chǎng)的壓力,使得我無法專注于整個(gè)架構(gòu)體系的設(shè)計(jì),在2.0開始的版本里面,從組件入手,使組件的開發(fā)、設(shè)計(jì)形成一套真正的體系化的東西,這在短期內(nèi)看不到什么效果,因?yàn)樗薪M件的外觀并沒有得到變化。甚至看起來基本上沒有什么工作成果,但是我知道、AOM里面的人也知道,我們的組件內(nèi)部再也不是東拼西湊的夾雜著js與html、css的混合體了,雖然在2.0M1中,我們只是重構(gòu)了布局方面的組件,其他的組件都還是采用原有的方式,但是在后續(xù)版本中,所有的組件都會(huì)采用新的方式,會(huì)協(xié)同的很好。

        除了組件,2.0的東西還真的很多,今天在寫ReleaseNotes的時(shí)候,我竟不知從何下筆,關(guān)于2.0的其他特性,我不會(huì)做怎樣特別的介紹,我只是把我當(dāng)時(shí)包括以后同老袁一起做這些事情的感受寫出來。

        AOM2.0M1我認(rèn)為有突破的幾個(gè)方面:
       1. IoVC編程模型;
       2. 無需維護(hù)狀態(tài)(相信嗎?);
       3. 基于APT的組件快速開發(fā)模式;

        最震撼的,莫過于老袁的ELite,這是對(duì)我影響較大的一個(gè)事情(雖然我沒有參與),讓我明白了“科學(xué)家”與“程序員”的區(qū)別,這件事情我不在這里過多的說了,但我一定會(huì)從頭到尾把這件事情的來龍去脈講清楚。包括它的產(chǎn)生,構(gòu)思與實(shí)現(xiàn)。

    posted @ 2008-02-22 22:25 張旭 閱讀(326) | 評(píng)論 (3)編輯 收藏

    主站蜘蛛池模板: 99精品免费视频| 无码视频免费一区二三区| 亚洲精品日韩中文字幕久久久| 亚洲第一网站免费视频| 久久亚洲色WWW成人欧美| 久久影院亚洲一区| 亚洲黄色免费电影| 黄色a级片免费看| 亚洲国产精品久久久久网站 | 老湿机一区午夜精品免费福利| 黑人大战亚洲人精品一区| 中文字幕无码播放免费| 一级毛片在线免费视频| 亚洲国产精品人久久电影| 免费国产怡红院在线观看| 最近中文字幕免费2019| 精品特级一级毛片免费观看| 亚洲免费在线视频| xvideos亚洲永久网址| 中文字幕免费在线看线人| 日韩免费码中文在线观看| 亚洲理论片在线中文字幕| 免费在线观看黄网| 曰曰鲁夜夜免费播放视频| 高清免费久久午夜精品| 国产.亚洲.欧洲在线| 久久精品国产69国产精品亚洲| 91黑丝国产线观看免费| 三年片在线观看免费西瓜视频| 亚洲欧洲无码AV不卡在线| 内射少妇36P亚洲区| 亚洲中文字幕伊人久久无码| 999在线视频精品免费播放观看| 两个人看的www免费高清| 日韩色视频一区二区三区亚洲| ass亚洲**毛茸茸pics| 亚洲AV日韩精品久久久久久| 免费播放特黄特色毛片| 最近中文字幕mv免费高清电影| 一区二区三区在线免费看| 国产特黄一级一片免费|