1、我感觉主要的停顿是发生在代码库的载入、对象的初始化,所以使用NativeWindow总有些不太好,但是也如大家讨论,直接使用qx模拟的window确实也有诸多问题,我自己也使用过通过xhr载入js文件的方法,来实现类似多文档的方式,但效果不理想。通过封装可以解决变量命名的问题,但我有些页面需要直接写一些HTML来实现,这些HTML里的id就要保证不重名。再就是调试的问题。虽然上述问题我也都找到了解决的方法,但仍感觉不放心,所以我现在还是决定使用NativeWindow的方式,这个难度较低,容易掌握,主要问题就是载入库时的速度问题,我想应该想办法压缩库,每个页面载入的库,可以做些裁减。这个解决方法或许更稳妥些。
2、国际化,用静态js的话是比较麻烦,但既然大家抉择使用struts+jsp可以解决国际化问题,那我抉择可以把js当jsp来处理嘛。随便说说,我现在也没考虑这个事情。
3、百万级js代码,我现在做的项目因为是基于qooxdoo的,所以多数页面都是全js的,当然限于项目的规模没有百万级js。但使用xhr载入js文件的话,就不存在一次性载入上百js文件的问题了。
有不少同仁询问关于qooxdoo和json-rpc-java的相关问题,这里做些说明:
1、qooxdoo的官方网站是qooxdoo.org,上面有demo,很多,你可以下载后在本机查看。对于ajax,dojo,yui也要多关注,dojo受支持程度更好些。最近我在使用jquery,感觉非常好,推荐了解。
2、qooxdoo和json-rpc-java没什么必然的联系,json-rpc-java就是一种web rpc,如果你只做java的话,建议看看dwr就可以了。另外qooxdoo本身也有rpc模块,是基于json-rpc的。
@fred
你是说 dhtmlXGrid.js ?
还是其他的?
qooxdoo0.6有了table,这个table相当于一般讲的grid,
http://qooxdoo.org/demo
你可以到他的网站去看看,因为是国外的网,所以速度上要慢一些
@sun123
1、这个我也没遇到过,使用iframe问题满多的,现在我模仿桌面程序的多文档方式来做的,你也可以尝试一下,另外感觉你现在使用qooxdoo的方式,倒不如找一些比较小的ui库来做。
2、现在这种用法是会在document.onload之后调用window.application.main,如果直接写的话,只能写在</body>之前,否则有些内容还没准备好,不过如果你的界面都是使用qooxdoo来生成的倒也无所谓,但qooxdoo的执行就是找这个东西,在他的官方网站上有篇文章是介绍qooxdoo的执行顺序的,你可以去找来看看。
@jolestar
你应该了解dwr,这个和qooxdoo没有什么关系。
@sun123
速度上我没太注意,那个api打开慢,我想主要是内容多。
我现在新的项目打算使用0.6来做,并且已经把原来使用0.5x的一个页面改为了0.6的库,除了类名上的转换,其他有少许改动。还有些细节问题,现在还没来得及细看。
文中我说其api的doc好用,现在看也不全是,原来的时候,看一个类,在一个页面上可以同时看到该类本身和其父类的所有属性和方法,但现在要一层层的点,感觉反倒不如之前了。:)
我还没找到国内讨论qx的地方,本来想给Ajax中国论坛联系一下,开个qx的版,但看了一下Ajax中国经营的不太理想。
@sun123
我们现在没有涉及到多条数据的修改,不过如果做这种功能的话,实现方法也和form刷新一样的,xmlhttprequest提交和form提交,主要就是页面是否切换,另外xhr似乎不能上传文件。
只不过如果我们做的话,就要自己想一下,如何做方便了,qooxdoo的ListView还是单薄了些,我们会再找些其它的ListView(一般其它的都叫Grid)看看。
sybase公司我总觉着他不大肆宣传自己,但他却推出很多漂亮的工具。
@sun123
似乎你只是使用qooxdoo做外壳,多数情况下,还是使用其他的技术。
1、你的“其他的js”是什么,我很感兴趣,有这么强的功能,还是使用了一些validate框架,如struts的. 现在我都是自己手工在写js进行校验。但正在筹备给QxListView提供一些辅助功能,来达到校验的目的,同时附加增删改的通用代码,我们还在开发一个数据库管理工具,然后在此基础上,实现类似ROR的一些机制,如自动先生成一套基本的数据库管理的代码,然后项目在这些基础代码上,进行开发。
2、用脚本写的,准备用QxBuilder做,但多数页面代码并不多,大家都懒得去了解QxBuilder。不过我还是推崇QxBuilder的方式。
3、你的iframe里的内容还是使用基本的struts的方式吗,我这边因为界面全部是使用qooxdoo,所以页面不进行刷新,与后台的数据交换都是使用xmlhttpclient,但直接使用显然开发效率太低,所以使用了一些框架,原来是使用DWR,我也推荐你使用DWR,虽然我现在使用json-rpc-java,但这是经过我们改造的,在使用方便性上和DWR类似。
我不知该如何说明写点示意代码你参考一下
后台定义类
public class Foo{
public void saveObject(com.ynstudio.xxx.User user){....}
}
然后在spring里注册为id='foo'
前台页面的js
var user = new Bean('com.ynstudio.xxx.User');
user.set('id','ST001002');
user.set('name','张三');
json.rpc('foo.saveObject')(user);
@emu
1、楼主已经说了
“有些时候无法改变服务器端网页的编码(例如获取别的网站的天气预报信息),在这种时候就只能在客户端通过js做编码的工作了,”
2、这个方法在firefox应该不行,所以ajax的编码问题在浏览器里还是不能完全解决,只有等浏览器扩展,并且统一处理方法了。
execScript("gb2utf8_data = MidB(gb2utf8_data, 1)", "VBScript");
@sun123
1、不是很理解你的意思,你的iframe里的页面是否也是使用的qooxdoo?
2、对于数据处理来讲,我们使用QxListView来列表显示普通的数据,使用QxTree来显示具有层次关系的数据,使用QxTextField,QxComboBox等来构成Form表单,给用户输入数据,然后将这些数据组织成数据对象,使用json-rpc-java来传递为后台进行处理,官方的json-rpc-java并不好用,你可以使用dwr来完成同样的功能。我们使用QxGridLayout来对QxTextField,QxComboBox进行布局,自己写了一个FormManager的方法来对QxTextField,QxComboBox这些表单项做些辅助性的管理。最后的效果就如本文中的第三张图片一样。
不知这些是否有点用处。
@sun123
你是在正式的项目中使用的吗,能不能详细谈一下你的想法,包括各类ajax库的比较,福星高照兄也是,抽时间写点全面一些的文字,我们也学习一下 :-) ,看看高手的想法
@asan
:-)
正如sun123所说。
@sun123
我觉得你那里旧机器跑得慢,更重要的原因应该不是700k的。。。。。
是的,我的理解是对于老旧的机器,浏览器解析这700k的代码可能有些困难,而不是因为文件大而传输慢,浏览器可以缓存的,这个不是问题。多数情况下,一般的电脑运转起来还是蛮流畅的,只是一次打开一个几百个节点的树有明显的等待,这个还是可以接受的。
@福星高照
YUI我觉着主要是比较小,如果项目中仅仅是把特殊的WEB UI作为辅助的话,还是不错的,虽然部件还不全。而qooxdoo 700K的代码真的很头疼,有些客户的旧机器跑起来很费力。
我有时也觉着使用现在这种模式开发不如以前的直接网页get/post方便,一直感觉有些想不通,为什么会原来的模式会感觉方便,现在感觉原因是这样几个方面,1、原来的时候页面设计可以交给美工,现在自己做,2、原来html和java代码可以混合写,即jsp的方式,现在用javascript将显示和数据进行结合,使用widget还好些,如果是直接操作HTML,那就像CGI的方式了,3、javascript的编辑器比jsp的还不好。
re: JSP生成静态页实践及其设计思想 一农 2006-08-10 22:51
还有一种生成静态页面的方法,你在网上搜
extends HttpServletResponseWrapper
就可以了解到了.
@sun123
另外,强烈建议大家搞个讨论qx的地方,上传一些例子share。
大家可以看看哪家论坛可以提供这个帮助,我朋友有个论坛,但其主题和这个不是很合适,虽然他们公司也是做互联网开发的。
@hawk
我用QxRequest获取数据,返回的却是中文乱码,
你查一下response的header中是否有编码信息,如果没有在header中添加编码信息。
@hawk
另外我个人觉得QxListView并不适合大量数据的显示,在数据列太多情况下,滚动条的速度变的慢的难以接受,我更喜欢active_widgets的grid,如果能写一个QxGrid就好了,呵呵
是的,QxListView的效率不太好,我看到其他库的一些ListView(有的叫grid)是基于table实现的,而QxListView是单独的一个个div,在我的T42上其实运行还是满流畅的,但配置差一些的机器就明显的满了。http://www.linb.net/ 的ListView(grid)满好的可以参考一下,linb是国人开发的,不错。
@sun123
你的问题和福星高照兄的不一样,你用iframe后,就会存在这样的问题,因为菜单的显示和消失是通过感知鼠标的,但当你的鼠标进入iframe后,菜单所在的frame就无法感知鼠标了,所以也就消失不了了。
<Connector port="8080" URIEncoding="UTF-8" ... />
如果这样解决,势必影响其它的application,我以前在使用mvnforum的时候解决的方法是将form的method由get改为post。如果是链接的话,需要进行encode处理,我最近也要试用这两款软件,到时再仔细研究一下。
@mixlee
在UI上B/S是倒退,使用类似C/S的web ui是为了改善可操作性。
胖客户端是倒退,但富客户端现在是趋势。
比如gmail,为什么搞那么麻烦的代码,就是为了方便客户操作。
有些地方ajax只是辅助性的,有些地方则是基于ajax来进行开发,场合不同而已。
js web ui+rpc+service是否也是一种框架呢?
我用qooxdoo(一个js wen ui库)来构建页面,使用json-rpc-java(类似DWR)来访问后台的java程序,传递和获取数据。
http://www.blogjava.net/ynstudio/archive/2006/07/23/59648.html
我认为由于使用了XHR,使得页面不刷新,带来很多方便,而ActionForm使用的繁琐,数据模型上的简单,是最让我讨厌的,而采用了json-rpc,感觉真的很好。因为可以前后台直接传递对象。就像使用javascript直接调用java程序一样。不再像以前一样想办法对付ActionForm,因为即便使用了BeanUtils,也存在很多问题的。
@福星高照
1、"你说得太简单,menubarbutton如何用"
因为我现在没时间去看这个问题所以我才说,让你参考一下menubarbutton,因为Qxmenubar就处理了mouseleave,来切换menu。
2、"js不需要每次都载入吧,缓存不能对js起作用吗?"
js文件是被缓存但是浏览器还是要重新把qooxdoo.js解释一遍,这个是消耗时间的,而且是明显的消耗时间。
3、"关于刷新前的状态,该保留的还是得保留吧,"
不单刷新,而且后退也应该处理的,但感觉会带来麻烦,对我做的项目来讲似乎也无必要.不知你是如何保留刷新前状态的.如果我来处理这个问题的话,我可能会模仿编辑器的方式设置一个undomanager,来处理,通过iframe来记录后退。
@福星高照
localeCompare,^0^,好
@李孜
开发人员的回复只是解释了,这个内存问题的原因,并没有说可以解决,除了刷新,我们发现只有把所有相关的页面都最小化,IE才会进行内存的释放。
你说bindows没这个问题,抽时间研究一下。不过在我们项目里,主要的内存消耗我们发现是由于window.open造成的,同一页面长时间操作变化不算太大。
@福星高照
1、我刚才看了一下确实中文排序有问题,不过我猜想原因是我使用RPC是基于utf-8的,所以排序不是按拼音。utf-8里汉字是按笔划组织的。这个问题我有时间会测一下原因,不过似乎不好解决,没办法的话,可能要交由后台处理一下了。
2、这个我没了解过,你可以参考一下menubarbutton。
@李孜
首先是remove,然后再dispose掉,不过也降不到初始值。bindows不是免费的,所以我这边没有使用。
@福星高照
1、你说的情况确实是的
2、我测试的是支持中文排序的,你再检查一下看看,不过我还没来得及看0.5.3,另外如果你需要特殊的排序方法,可以自己添加排序方法,可以参考一下
QxCompare.js
3、我的gmail信箱是ynstudio,在这回帖聊天怕影响别人浏览^0^。
@福星高照
1、你在qooxdoo-0.5.2-dos\themes\appearance\default下会看到theme.js文件,看一下代码就明白了^0^
2、JSON-RPC-JAVA在后台发生异常时,他会生成一个js的异常,你可以捕获该异常然后自行处理。如果得不到数据就直接返回你返回的内容,或为null,或为空数组等。
不知兄弟,身在何方,如果在南京,我们可以一起聊聊。我现在有个java的学习小组,大家互相学习,互相促进。
@hawk
这个问题我也尝试了一下,但没成功,还没时间去了解原因,你可以查看一下LisView里的几个单元格的类,可以添加字体等样式的,但我加了背景后背景的显示总是一闪一闪的。现在我用的电脑上没源码,我会抽时间研究一下这个问题,到时在此回复一下。
另外推荐firebug,可以帮助你解决这个问题。
to 福星高照
ListView的单元格实际上是一个个的div拼起来的,如果需要边框就要改变这些div的border,这个需要你设置单元格的边框属性。你可以了解qooxdoo的theme,然后给你用的单元格,添加border属性就可以实现了。我试了一下可以,但如果你要对边界上的单元格和内部的单元格做区别对待的话,就要修改库的代码了。或者对所有单元格二次处理一遍。
echo2和qooxdoo的机制不一样,速度上不好比。echo2也有设计工具了,这个满方便的,但我觉着echo2的方式不太好,至少我不喜欢。qooxdoo+rpc的开发模式更像C/S方式的开发,可惜没有界面设计工具,也没有很好的javascript编辑环境,不过我们现在尽量将逻辑放在后台,所以开发起来感觉还是蛮好的,比传统的网页方式感觉还好,还快,一个同事说,使用qooxdoo+rpc感觉很多事情都很直接,而不是像使用网页刷新那样,要考虑页面数据的保留问题等等。
@原创专栏 开源学习
我修改的目的就是为了让其他同事能将精力都放在业务上,而不是技术上。
“ajax,ui框架太容易让我们有修改的欲望了. ”我做编码有几年了,被震撼了几次以后,对自己使用的框架的修改欲望完全都是来源于项目的需要,特别是对今后可能升级的框架,一般不和原始作者沟通,我是不会做修改的。
我需要对DWR来做一些改动来适应我自己的需要,但在我看懂DWR之前我看懂了JSON-RPC-JAVA(几眼就看懂了),而且能满足我的需要所以我就改造JSON-RPC-JAVA了,现在仍然使用JSON-RPC-JAVA的原因是JSON-RPC-JAVA是基于JSON-RPC的,而DWR的协议更私有一些。另外因为我使用了qooxdoo,DWR的一些js代码显的多余了,鸡肋一般。等我把JSON-RPC-JAVA再做些改动,吸收DWR的一些优点,从我的项目中抽取出来之后我会将代码公开出来。
我分析了一下163(尚未结束),很多地方还都是用的frame,主体是gblankxxxxx.htm,使用firefox保存文件,会给你带来一些惊喜。
另外gblankxxxxx.htm的大体结构是
<html>
<body>
<div>开头</div>
<table>
<tr>
<td>
左侧导航
</td>
<td>
<!--右侧-->
<div>
共四、五个,和电子邮件、通讯录、邮箱选项等几个tab对应。
</div>
</td>
</tr>
</table>
</body>
</html>