閑人野居
          好好學(xué)習(xí),天天向上
          posts - 57,  comments - 137,  trackbacks - 0
            對于標記庫,不想再說些什么了。jsf可能最大的毛病都在這個標記庫上面,首先定義的標記在jsp中,并不起到相應(yīng)的輸出功能,而只是用來增加相應(yīng)得組件。在jsf中,最上層的組件為UIViewRoot,基本上所有的操作都是需要圍繞著此組件。而標記庫的存在,只是為了簡化相應(yīng)的操作。如下的標記:
          <f:view>
              
          <h:form>
               
          <h:panelGrid>
                  .   
              
          </h:panelGrid>
                 
          </h:form>
          </f:view>

          其實對應(yīng)的java代碼,如下:
          FacesContext context = FacesContext.getCurrentInstance();
          UIViewRoot root 
          = context.getViewRoot();
          HtmlForm form 
          = new HtmlForm();
          HtmlPanelGrid grid 
          = new HtmlPanelGrid();
          form.getChildren().add(grid);
          root.getChildren().add(form);

          也就是說沒有標記庫,我完全可以使用java代碼完成。
              那么標記庫的存在到底有沒有意義,意義可能就在于簡化相應(yīng)的操作,想想html的屬性是比較多的,如果每個都要用java代碼去控制,那么可能對于應(yīng)用來說,顯得很不靈活,因為改代碼畢竟沒有改jsp來的快。而且代碼需要重新編譯。所以jsf的標記庫存在也是有點意義的。
          可是,現(xiàn)在的問題是,由于jsf本身就是規(guī)范,其實現(xiàn)也就會各有不同,對于每種實現(xiàn)都會帶有自己的那一套標記庫,隨著標記庫的增加,對于使用者來說,也是不堪忍受的重負。所以,有些時候,如果需要動態(tài)做一些配置,那么還是丟棄標記庫,用java代碼來完成吧。當然facelets,提供了一種方式,用于很靈活的擴展多個標記庫,可是,看著那么多的標記,總是還有些頭疼。

              其次,對于標記庫來說,各個標記庫的不兼容也是一個很大的問題。就拿jstl和jsf來說,jstl的變量聲明,在jsf中肯定是沒有辦法解析的,同樣jsf中的變量,在jstl中也不能認識。我指的是頁面聲明的變量,而不是session變量,如下的例子:
          <h:dataTable styleClass="table-background"
                                           rowClasses
          ="table-odd-row,table-even-row"
                                           cellpadding
          ="3"
                                           value
          ="#{recordBean.records}"
                                           var
          ="record"
                                           binding
          ="#{recordBean.recordData}">
             
          <c:if test="${record}">
               
             
          </c:if>
          </h:dataTable>

          在dataTable中聲明了變量record,但是在jstl中是不會認識的。
              可能這個問題,facelets已經(jīng)解決了,主要facelets把所有的Elcontext中的變量都結(jié)合在了一起,使用自身的FaceletsContext。
          不過,如果我只是需要簡單的功能,還需要使用facelets,那么也就有點大材小用了。況且facelets也只是提供了類似tiles的功能。
          最后,想說的是,雖然jsf目前的ide支持,比其他框架多多了。可惜,人家都是建立在相應(yīng)的標記庫上的,如果你定義了自己標記庫,人家不一定會認識。所以標記庫的存在,對于jsf來說,也許并不一定是好事情,可能sun覺得如果把jsp拋棄了,有點可惜。所以在升級jsf的同時,也升級了相應(yīng)得jsp規(guī)范。
              個人覺得,也許模版技術(shù),可能也會是一種選擇,看看velocity和freemarker,覺得其比jsp有優(yōu)勢多了。

          posted on 2007-05-09 20:33 布衣郎 閱讀(2801) 評論(4)  編輯  收藏 所屬分類: web view技術(shù)

          FeedBack:
          # re: 關(guān)于jsf 的標記庫
          2007-05-10 09:43 | 沖向SOA!
          標記庫不兼容是比較煩,jsf1.2有所改善。  回復(fù)  更多評論
            
          # re: 關(guān)于jsf 的標記庫
          2007-05-10 10:57 | Tendy
          如果沒有標記庫
          通過 new 操作符創(chuàng)建 component
          樓主覺得容易排版么?  回復(fù)  更多評論
            
          # re: 關(guān)于jsf 的標記庫
          2007-05-10 15:49 | 布衣郎
          @Tendy
          可能這正是需要我們考慮的,也許使用模板方式,是一個很好的替換方案。不過需要更改jsf的renderer體制  回復(fù)  更多評論
            
          # re: 關(guān)于jsf 的標記庫
          2012-07-02 09:46 | 馬云

          <2007年5月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(12)

          隨筆分類(59)

          隨筆檔案(57)

          blog

          java

          uml

          搜索

          •  

          積分與排名

          • 積分 - 357733
          • 排名 - 155

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 革吉县| 新巴尔虎左旗| 嵩明县| 龙胜| 保山市| 咸丰县| 阿尔山市| 定结县| 辽宁省| 县级市| 牡丹江市| 会东县| 丹寨县| 水城县| 梧州市| 阳山县| 濮阳县| 苍山县| 永泰县| 东光县| 马尔康县| 龙川县| 舞阳县| 邢台县| 临高县| 陈巴尔虎旗| 长沙市| 静宁县| 偃师市| 台东县| 遂昌县| 琼结县| 穆棱市| 宾川县| 乡宁县| 宁远县| 扶风县| 五家渠市| 鹤壁市| 阳谷县| 汝阳县|