介绍一个非常不错的基于java、web的UI解决方案,用java做web应用的人都知道,web上UI开发的痛苦吧,UI表现上几乎没有什么现成的控件,这一点.net的确是比java要强一点,即使struts也没有提供很好的解决JSPWidget是一个台湾的开源的UI框架,它仿照.net的viewstate等思想,提供了事件驱动、页面状态保存(viewstate)、校验、以及常用组件(dropdownList、panel、treeView、menu)等解决方案。并且提供详细的文档和demo。其实在一年前就看到过这个项目了,今天偶尔又看到推荐给大家,希望可以学习、参考、借鉴他的思想。
项目地址:http://edu.uuu.com.tw/jspwidget
看一下他的Menu组件效果很cool吧:http://edu.uuu.com.tw/jspwidget/docs/gui/menu_03.jsp
下面是作者对webUI的一段分析:
設計目標
然而,單單用 JSP 來開發 Web 專案並不容易,因為 JSP 是非事件驅動程式撰寫模式 ( Non Event-Driven Computing Model)、 UI (HTML Elements) 無法由程式碼直接控制、以及 UI 的狀態(View State)無法自動保存, 這些因素造成了JSP的程式碼與 UI 混合在一起,錯綜複雜的 UI/程式碼不僅在開發上不容易,也造成日後維護與擴充上的困難。
相較於傳統的 Client Forms 或 Client-based Web Applications 程式撰寫模式而言, JSP顯然不直覺多了。原因有三,茲並列比較如下:
因素 | Client Forms | 純 JSP |
Event-Driven Computing Model | 你可以藉由撰寫事件處理函式 (Event Handler) 來處理由 GUI components所觸發的事件。 例如 Button 的 OnClick 事件或 DropdownList 的 OnSelectChanged 事件。 | 因為JSP是由上到下循序處理 (Sequential Processing),因此你必須用程式來判斷到底使用者按了哪個按鈕, 使用者是否改變選定的選單項目等等,然後根據這些判斷結果來撰寫對應的程式碼。 |
GUI Compoment | 所有 GUI Compoment 的屬性與行為都可以由程式碼完全存取與控制, 程式碼與 UI是完全分開的。 | 因為JSP是由上到下循序處理 (Sequential Processing),因此你必須在適當的JSP檔案位置插入程式碼, 以改變 output 至瀏覽器的 UI。但這樣撰寫方式往往造成程式碼與 UI 混雜在一起,非常難維護與擴充。 |
Retain View State automatically | 無庸置疑,在傳統的 client forms 中, GUI component 的狀態 (view state) 自動保持在最後使用者對它改變的狀態。 | 因為 HTTP 是不保持狀態的 (Stateless),因此所有的 HTML element 的狀態 (View State )會在 post 回 web server 後就消失。 為了保持最後使用者對 GUI Compoment 改變的狀態 ,你必須要撰寫程式。 保持 HTML element 的狀態 (View State )並不容易,不同的 HTML element 需要用不同的處理方法。 通常,約有25%的程式碼單純為了這件在 Client Form 中視為理所當然的事。 |
JSPWidget是在 JSP 標準上建置的一套 Framework,它的設計目標便是為了讓程式設計師可以直覺地方式來開發JSP Web 應用系統,就像是在開發傳統的 Client Form 一樣輕鬆簡單 。
原文地址:http://edu.uuu.com.tw/jspwidget/docs/jspwidget_introduction.htm
name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-4465827781731051&dt=1125637635921&format=468x60_as&output=html&ad_type=text_image&nloc=http://blog.csdn.net/fckeditor/editor/fckeditor.html?InstanceName=Editor_Edit_FCKEditor&Toolbar=Default&u_h=768&u_w=1024&u_ah=740&u_aw=1024&u_cd=16&u_tz=540&u_his=9&u_java=true" frameborder="0" width="468" scrolling="no" height="60" allowtransparency="65535">