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

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

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

    隨筆 - 3, 文章 - 0, 評論 - 12, 引用 - 0
    數據加載中……

    2008年2月24日

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

    組件屬性綁定

        我所接觸到的基于JSF的Web應用中,位于UI界面上的一個界面元素或組件,想要顯示數據,通常的寫法是這樣:
    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屬性是對應著這個inputText組件的value。這在很大程度上,限制了greeting.xhtml的作用范圍,使這個UI完全沒有機會被重用。很長一段時間,這都是困照著我的一個問題。

    Binding是IoVC包含的一個重要特性,它不僅可以使UI獨立出來,而且Binding是采用后期綁定模式實現,為組件的無狀態的實現提供了底層基礎支撐。關于IoVC的實現方式,在這篇隨筆中并不過多討論。
    在IoVC的編程模式下,對UI上的界面元素的控制力被轉移到了ManagedBean中,UI不需要關心誰在使用它,以及數據的來源。
    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標簽,提供了將ManagedBean的filed綁定到組件的attributes中的能力,默認情況下,@Bind根據所作用的filed的name來匹配UI中的元素的id,然后將field的值取出綁定到對應的UI中的組件上,上述代碼表示,將UserBean中的name屬性,綁定到與之對應的inputText組件的value中。

    下面列出了@Bind標簽的典型使用場景:

        @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標簽將組件的attributes與ManagedBean中的屬性一一綁定起來之后,在UI上如果組件發生變化,其變化了的屬性會反映到ManagedBean中,同樣,在ManagedBean中,如果更改了屬性值,UI組件也會發生相應的變化。
    一個使用IoVC模式的完整頁面與ManagedBean(其中涉及到的其他標簽,會在后面介紹到):
    運行效果:


    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) | 評論 (6)編輯 收藏

    什么是IoVC

    什么是IoVC

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

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

    IoVC帶來了什么

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

    托管Bean的簡化

        傳統方式中,編寫一個ManagedBean,需要編寫faces-config.xml文件,例如編寫兩個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等關于ManagedBean定義的一整套完整的標簽,上面的定義,在IoVC中將會轉變為如下方式直接聲明在代碼中,無需維護faces-config.xml文件:
    @ManagedBean
    public class DepartmentBean
    {
        
    }

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

    關于IoVC剩余的幾個特性的支持的描述,我將會陸續寫一些文章來進行深入介紹。

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

    綁定(Binding)

      

    資源注入 (Injection)

      

    多語言支持

       

    邏輯事件

       

    “無狀態組件”的傳說

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

    主站蜘蛛池模板: 亚洲人成网站999久久久综合| 亚洲国语精品自产拍在线观看 | 亚洲男人电影天堂| 免费福利电影在线观看| 国产亚洲精品精华液| 丝瓜app免费下载网址进入ios| 国产精品亚洲mnbav网站| 一个人看的www视频免费在线观看 一个人看的免费观看日本视频www | 中文字幕在线成人免费看| 亚洲AV之男人的天堂| 一级做性色a爰片久久毛片免费| 亚洲国产免费综合| 一级午夜a毛片免费视频| 亚洲人成网77777亚洲色| 国产免费一区二区三区在线观看| 亚洲宅男永久在线| 成人黄色免费网站| 亚洲国产成人综合精品| 亚洲国产高清精品线久久| 久久国产精品免费一区| 国产日韩亚洲大尺度高清| 1000部无遮挡拍拍拍免费视频观看| 亚洲不卡中文字幕| 国产在线a不卡免费视频| 国产午夜精品理论片免费观看| 亚洲天堂男人天堂| 免费无码AV电影在线观看| 美女啪啪网站又黄又免费| 亚洲综合亚洲综合网成人| 三年片在线观看免费观看大全动漫 | 水蜜桃视频在线观看免费播放高清| 久久综合日韩亚洲精品色| 成人黄软件网18免费下载成人黄18免费视频| 日韩欧美亚洲中文乱码| 中文字幕亚洲综合久久菠萝蜜| 日韩中文字幕免费视频| 亚洲欧美日韩中文字幕在线一区| 亚洲男人的天堂一区二区| 最近中文字幕完整免费视频ww | 三上悠亚电影全集免费 | 亚洲av永久无码精品国产精品|