??xml version="1.0" encoding="utf-8" standalone="yes"?>
问题一Q要不要采用javascript框架Q?/p>
我刚到公司的时候,我们的技术架构师是不同意使用javascript 框架。理由很多,javascript 没有得到应有的重视是主要的原因,他一直强调我们做的是应用pȝ。所以他只在|上扑ֈ几个js攑֜目下面Q然后页面上很ؕQ要写一颗树(wi)展现真是ȝ(ch)又麻?ch)。而且大家的javascript水^都很一般,基本只是E微了解一炏V用的最多的q是数据校验Q写的方法还是document.form1.formname,document.add['id']之类的写法。这让我q个天天x界面的技术h?冒昧自称技术h员,其实只是在界面层上有点研I而已)真是抓狂。很讽刺的是Qؓ(f)了用一个小H口弹出错误信息Q把jqeury+ui搬出来。整个项目也只有q么一个地方用到jquery,d的时候jquery的h气正在攀升。我来了之后Q由于自p分小Q在技术上说不上话Q后来大家界面上开发的时候遇到这个那个问题解决不了的时候,大家慢慢的认识到了我的h(hun)倹{新的项目领D我负责界面规范这块,公司也想把这个项目做成一个品。经q很多次“力荐”,我终于说服了大家Q我们不能再"IE only" 了?/p>
我认Z用的理由Q?一Q我们要有兼容各U浏览器的能力,现在新的览器大战正在打响,来的浏览器市场q很难说。在cssq方?我借鉴了ext 的兼Ҏ(gu)想Q在body标签上加上class "IE IE6",q样我们不要使用hack dҎ(gu)览器了。对于javascript上,基本上只有IE和非IE的差别了。主的javascript框架都提供了很好的浏览器支持。二Q用javascript框架的目的是提高开发效率。这与主的javascript不谋而合。三Qweb应用正在飞速发展,界面层应用越来越复杂Qjavascript不在一个校验数据的脚本了,ajax的应用能很好的提升用户体验,有些场合使用ajaxQ用h作更加方ѝD个很单的例子Q很多的记录需要排序,虽然在数据上来看Q只要改变排序D解决问题Q但在界面上Q难道要用户d写排序|q样用户?x)觉得很难操作,而用上sortableQ这个问题不仅简单,而且操作h不知道清晰多。我们从传统的c/s走到b/s不仅是因为b/s 不需要安装,升Ҏ(gu)。还是因为b/sh更前的表现力?/p>
当然Q反对用javascript框架的理׃很尖锐。一Q开发h员的水^很难以掌握现有的javascript框架。二Q大家坚持认为,其实现在用的javascript的地方还不是很多。从需求上屈指可敎ͼtree,borderlayout,grid,calendar?/p>
Ҏ(gu)Q我提出的想法就是,大家如果觉得难以使用的话Q我在javascript框架上做一ơ封装,降低使用隑ֺ。第二个理由更好_(d)虽然现在使用的地方就那么几个Q那好,你能拿出更好的方案么。曾l架构师_(d)我们希望每一个界面控仉是单独的Q能单独使用。当然现在的Ljavascript 都是q样的。这P我就在大家仍用怀疑的眼光注视我的时候开始了javascript框架之旅?/p>
问题二:(x)用哪个javascript框架Q?/p>
q个问题不是在讨论或者争执哪个好哪个不好Q未免大家再又争执,我让他们自己找javascript框架Q甚臛_以把他们最熟?zhn)的拿出来使用。大伙都说没有时_(d)q样我也不担心有后话了?/p>
我把目前L的javascript分ؓ(f)三类?/p>
诸如Qprototype/jquery/mootoolsq样的javascript框架Q只能是javascript工具。他的优势就是扩展性强Q社区支持很好,其是jquery
W二cd是:(x)yui/ext/dojo/qooxdooq样的框架。他们是一套全pd的纯客户端的ui解决Ҏ(gu)Q用方便,能满x们的需要。缺Ҏ(gu)入口很高Q适用于做富客L(fng)。虽然我们现在的应用q是很多Q但是还没有到那个地步?
q有一cd是与服务器端技术结合的ajax框架Q他只能叫ajax框架,他基本只做数据交换。事实上只要做一个简单的servlet(j2ee)或者HttpHanlder(.Net)再在客户端加以封装,使用h也是很方便的。所以这cajax框架我认Z需要考虑?
在我看来Qƈ不是那个框架l对的好坏,而是什么样的框架能最好的满你的需求?
Z人阅历上来讲Q三cȝ多个框架我都知道一二。但是我最喜欢jquery,所以用了jquery了,他的好处是轻量U,扩展性强Q现有的插g以满需要。代码非常简介而且执行效率高。于是我找了一大堆jquery插g。再自己装城稍微简单的Ҏ(gu)。本着不重复发明轮子的原则。很多的界面问题都能解决了?
问题三:(x)真的是那样么Q?
时至2009,目完了Q到了需要再ơ封装城产品的时候,ȝ(ch)也就来了。我发现虽然jquery插g很多Q很全,但是׃是百花齐放,我就不想修改里面的代码。慢慢的使用发现很多插g不是很稳定,像jstree,jquery ui ׃先前用的版本比较低,D很有的bug自己写一些修正。现在回q头来看那时候做的东西,发现新的版本已经修复了这些功能。而换上新版本的jqueryQ变化还是蛮多,比如jquery.browser׃推荐使用了,怎么办?
来?
本文是在用jquery之后Q发现维护工作量也不的背景下写下来的。我不知道是不是我当初选择jquery是错误的。是不是应该选择ext 之类的有着更强表现能力Q更E_的框架么Q现在的代码q是不是那么理想。由于很多的历史原因Q大家还在用ecside Qjscalendar。用ecside是因为历史原因。用jscalendar是因为jqueryq没有一个日历控件能支持旉的。我一个h的精力有限,而且我很多的旉都在写项目代?说到底还是领g重视)。我担心我当时做的决定会(x)对将来造成负面影响?
冒昧发在首页上,真诚的希望大家提q看法Q在企业U应用系l上界面层应该怎样做,文中的有些观点如有不对的地方q请大家指教
之所以要把sql server 2000 jdbc 分页单独来说_(d)又两个地方还是值得一提,一者是sql server 2000要实现数据库分页是比较麻?ch)的事情。二者是jdbc查询出多个ResultSet 的取法?/p>
先在目的classpath中添加msbase.jar,mssqlserver.jar,msutil.jar 怎么来的׃多废话了。需要说的是我最先用的sql server 2005 jdbc驱动sqljdbc.jar攑ֈ目中,后来的程序是报错的。回头想惻I报错有理Qsql server 2005 已经支持rownum 分页了?/p>
先说说sql server 2000的分늚实现Q目前实现方法大概是那三U。我个hq是喜欢使用存储q程,原因是用非常方便,至于使用的存储过E,q里q是攑և来看看,估计大家用的都大同小异?/p>
IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[Pr_QueryByPage]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1) BEGIN EXEC dbo.sp_executesql @statement = N'create procedure [dbo].[Pr_QueryByPage] @sqlstr nvarchar(4000), --查询sql @currentpage int, --W页记录条数 @pagesize int --每页昄记录 as set nocount on declare @P1 int, --P1是游标的ID @rowcount int exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output select ceiling(1.0*@rowcount/@pagesize) as TotalPage,@rowcount as [RowCount] set @currentpage=(@currentpage-1)*@pagesize+1 exec sp_cursorfetch @P1,16,@currentpage,@pagesize exec sp_cursorclose @P1 set nocount off ' END GO
q个存储q程的实玎ͼ使用了三个系l存储过Esp_cursoropen ,sp_cursorfetch ,sp_cursorclose 从字面上的意思大概是他叫l果集用游标打开Q然后读取其中的@pageSize条记录,所以单从查询上来讲Q性能是不?qing)用select top 之类的实现?/p>
使用h非常Ҏ(gu)Qexec Pr_QueryByPage 'select * from yourtable',1,10 可以了ȝ(ch)的是他返回的是三张表。第一张表是查询的表,但是没有记录。第二个表一行两列,W一个列是总页敎ͼW二个列是总记录条数。第三张表才是需要的数据。这造成了取的时候有点小ȝ(ch)Q因Z前只知道Q在.net中可以直接fill(DataSet)Q然后DataSet里面可取DataTable。但是在jdbc里面我映像中ResultSet 只能容一张表。后来找了一些资料,原来PreparedStatement,CallableStatement,Statement都支持查询返回多个ResultSet Q好了,非常好?下面是我使用CallableStatemnt取到的结果集?/p>
CallableStatement cs = conn.prepareCall("exec Pr_QueryByPage 'select * from ckdmzd',1,10"); ResultSet rs = null; /** * execute returns : * true : returns ResultSet(s) * false: returns rows affected */ boolean hasResultSet = cs.execute(); if(hasResultSet){ /** * skip the first ResultSet */ rs=cs.getResultSet(); /** * second ResultSet : pageCount & recordCount */ if(cs.getMoreResults()){ rs=cs.getResultSet(); while(rs.next()){ String pageCount=rs.getString(1); String recordCount=rs.getString(2); } } /** * the thrid one is the paged result */ if(cs.getMoreResults()){ rs=cs.getResultSet(); while(rs.next()){ // do somthing with ResultSet } } }
q样实C分页Q网上很多h试了,q个Ҏ(gu)的性能不及(qing)别的Ҏ(gu)Q这里我要指出的是,别的Ҏ(gu)是不能返回ȝ记录条数的。而要知道ȝ记录条数Q通常需要select count(*) from ( your sql) q两ơ查询叫h的时间未必会(x)?/p>
使用上述Ҏ(gu)实现sql server 2000 jdbc 分页Q用方便,性能q说的过厅R我不知道sql server 2005 的查询性能是否又提升?/p>