当前位置: 首页 > news >正文

解决jsp程序不直接、代码与UI混杂的痛: JSPWidget

介绍一个非常不错的基于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的一段分析:

設計目標

開發 Web-based 應用程式已儼然成為企業應用未來的主流趨勢,而 JSP 具備了 Java 跨平台及可存取 J2EE 架構中提供的所有服務等優點,更是企業在專案開發時考量的最佳網站技術。

然而,單單用 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
<iframe name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-4465827781731051&amp;dt=1125637635921&amp;format=468x60_as&amp;output=html&amp;ad_type=text_image&amp;nloc=http://blog.csdn.net/fckeditor/editor/fckeditor.html?InstanceName=Editor_Edit_FCKEditor&amp;Toolbar=Default&amp;u_h=768&amp;u_w=1024&amp;u_ah=740&amp;u_aw=1024&amp;u_cd=16&amp;u_tz=540&amp;u_his=9&amp;u_java=true" frameborder="0" width="468" scrolling="no" height="60" allowtransparency="65535"></iframe>

相关文章:

  • Python TypeError: unsupported operand type(s) for /: ‘list‘ and ‘int‘
  • Hello,.NET Compact Framework 2.0(二)
  • 力扣Leetcode:4. 寻找两个正序数组的中位数(Python)
  • Smart Client Case Study Source Code Download from MSDN China
  • 力扣Leetcode:5. 最长回文子串(Python)
  • 古诗词推荐(一):春风十里扬州路,卷上珠帘总不如
  • 终于签完了
  • 古诗词推荐(二):若似月轮终皎洁,不辞冰雪为卿热
  • 腾讯面经zz
  • 力扣Leetcode:10. 正则表达式匹配(Python)
  • 从《关于跳槽的切身体会(转)》谈转载文章的职业道德!!!
  • 力扣Leetcode:11. 盛最多水的容器(Python、Java)
  • 劝学诗整理:安居不用架高堂,书中自有黄金屋。
  • 服务器群集:Windows Server 2003 备份和恢复的最佳做法
  • 力扣Leetcode:15. 三数之和(Python)
  • 分享一款快速APP功能测试工具
  • CentOS从零开始部署Nodejs项目
  • Cookie 在前端中的实践
  • cookie和session
  • ES6--对象的扩展
  • EventListener原理
  • extjs4学习之配置
  • JavaScript对象详解
  • Js基础知识(一) - 变量
  • python大佬养成计划----difflib模块
  • XML已死 ?
  • 编写高质量JavaScript代码之并发
  • 工程优化暨babel升级小记
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 面试遇到的一些题
  • 算法-插入排序
  • 因为阿里,他们成了“杭漂”
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • NLPIR智能语义技术让大数据挖掘更简单
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #if 1...#endif
  • (4.10~4.16)
  • (7)STL算法之交换赋值
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (分布式缓存)Redis持久化
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (十六)一篇文章学会Java的常用API
  • (已解决)什么是vue导航守卫
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET连接数据库方式
  • .NET面试题(二)
  • .net中生成excel后调整宽度
  • // an array of int
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • @RequestBody与@ModelAttribute
  • @serverendpoint注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • [52PJ] Java面向对象笔记(转自52 1510988116)