intel和amd谁的cpu视频处理好
出于对Q3ACN一个讨论的回复。
视频……
你也不说清楚。
你说的视频压缩和视频是两码事。因为视频压缩属于单指令多数据流典型应用,也叫矢量运算,所以sse这样的指令扩展就很有用。但是怎么说AMD和Intel都不是矢量计算机,差距本质上不大,只不过AMD支持sse还是遮遮掩掩,受制于专利呀,所以优化后的程序Intel比较快。
但是关于视频渲染可就不是这个样子了,压缩器都是在具体平台通过编译器优化过的,所以AMD的超强浮点性能就体现出来了。你看现在那些大片不还都是AMD平台么(当然是因为性价比)。
Intel再牛也干不过专业硬件,视频压缩完全可以通过压缩卡来完成,绝对比CPU快。通用的干不过专用的。
前两天去听Java的一个会议。Jams Gosling(Java之父)在谈起下一代计算机的时候还在说,多内核是方向,低主频的集群会是好的解决方案。
我靠,太郁闷了,Struts这破玩意儿!
我这里凡是有中文的行,任何更新都回出错。以前是某些有中文的出错,看来中文支持肯定有问题。而且它的出错提示是德语的,真晕!!!
而且出错以后会奇怪的跳出新窗口,不停,必须用TaskManager关掉它。
我用phpMyAdmin就没有任何问题,很好用。
下午看看这个Mysql-front还有没有救药,如果不行就彻底抛弃。
昨天我还只是觉得这个东西脱了裤子放屁,多此一举的利害。但是心想不过是浪费一些代码而已。
不过今天我继续发现,这个东西简直就是个隐藏的炸弹。
我本来没有在ActionForm里面写log做记录。心想如果里面发生了exception会抱错,因为我没有写try catch。但是后来我调试一个Action怎么都搞不定,明明在Action里面写了log,却怎么也不输出,我是异常郁闷!
大约浪费了两个小时后,我才明白,我这个Action调用了这个ActionForm,而ActionForm如果property匹配发生错误不会抱错的,也就是说如果那个request里面没有那个property它就会默认为null,而不报错。检查只发生在validate()方法,而这个方法非常恶心,如果发生了错误它会返回input的page,而不会报任何错误!(当然它存了ActionError在session)但是我却在log系统看不到,而且没有exception。就造成了程序中的一个黑洞,我什么都看不到。
而且ActionForm和input Page里面的html:text….那些标记的名称匹配非常费时,根本就不自动化,全部售动写非常容易出错,而且出错还有隐蔽性(没有的peroperty会null,前面说了),而又不能把所有null都到validate()检测,因为有些属性允许null,所以……
我快被ActionForm搞疯了!
所以,可以这么说,费了九牛二虎之力,ActionForm只能浪费时间和精力(Struts本意是使验证变得方便,容易测试),并且实际上测试起来非常困难,绝对是糟粕。记得有人说,既然Struts所有东西里都传了request、session这些东西,那么完全可以舍弃ActionForm,而把数据初始化写到Action里,如xxx=request.getParameter("xxx"),就和JSP里的Scriptlet一个样子,哈哈,不过这样Struts就不再是Struts了,只有形式了。如果伪需求要求必须用Struts,我们可以绕过(不用ActionForm,用request),或者小心点用。所以反过来说就是,我不想用这样的残废了。
关于MVC框架的一个好讨论
http://forum.hibernate.org.cn/viewtopic.php?t=6947&postdays=0&postorder=asc&start=0&sid=19cfb9f49ed6092478ad38654751f38c![]()
叫做struts和webwork双体验。
这里讨论的非常好。
虽然很长,但是值得认真看,里面讨论了很多MVC的核心问题,让框架一下子便得扁平了,那些复杂的东西其实不过是非常简单的概念。你也就理解了Struts的思想,还有Webwork的思想,以及他们的优缺点。不过本贴似乎都比较偏向于Webwork2。
不过说句公道话,ActionForm的确烂,写得恶心。Webwork那种Model-Driven真是看其来简单,而且Xwork有是IoC,还支持AOP(Inteceptor),所以我也希望摆脱Webwork。而转观Tapestry,虽然我以前评价过这个东西的view层非常有特点,但是Tapestry后面的东西还是非常丑陋的(Tape3后面很复杂,而Tape4用了HiveMind以后更复杂),而且Tapestry这个东西有严重的Apache通病,自己家东西杂烩,还特别乱七八糟的,代码一塌糊涂……
所以,看完这篇评论,你会非常清楚Struts应该怎么用可以避开它的弱点。
还有,坚定了由时间一定要学习Webwork2的信念。很多人说懂了Struts,学会Webwork2只需要一个下午![]()
关于Hibernate,小发现
结果遇到一大堆麻烦,搞了半天找不到问题所在。
然后把log4j里面的debug打开,发现还是捕捉不到exception然而tx却rollback了。
仔细看代码,发现在UserLoginAction里面catch(Exception e)然后做了log就结束了,忘记e.printStrackTrace()了,加上。然后发现了两个很严重的问题!
1、我跟踪了Hibernate的SQL,它里面的SQL的临时命名后面都加了“_”,这个东西造成我们的Domain的所有id在update时不管用,也就是说涉及存储和修改时,只有insert可以,因为这个时候的id是自动生成的,否则只要set Domain里面的id就会出错。
后来仔细察看,发现Mysql的字段名里面最好不要有“ _ ”,字符,否则Hibernate就会出问题。报告“could not execute query; bad SQL grammar”。解决方法就是把字段里面的“ _ ”去掉,比如我把user表里面的user_id改成了userid。
问题就解决了。2、解决了上面的问题还是有问题。我们的Manager的update方法不能用。会报告session里面不能有两个相同id的domain对象。
我写了个UnitTest却可以update。所以感觉很奇怪。
后来看到这里的解释:http://www.matrix.org.cn/thread.shtml?topicId=25286&forumId=23![]()
搞明白了问题。因为我们有UserAuthenticationManager,它里面会检查登陆用户的个人信息。而我在LoginAction的生命周期中UserAuthenticationManager一直处于激活状态,所以Hibernate的session也一直打开,而LoginAction里面再调用UserManager的update方法保存时就会出现session中调出两个同id的Domain对象的情况,Hibernate就会报错,然后rollback……
正好那里有解决方法,用merge方法就不会在SaveorUpdate的时候检查冲突对象了,问题就解决了。
所以希望大家注意:
1、把目前数据库中的_id这样的命名修改为xxxid这样的命名。
2、大家写的DAO中涉及到update操作的地方请使用getHibernateTemplate().merge()方法。
Web2.0,说馒头是面包
* AJAX 技术
* Syndication of data in RSS/ATOM
* Aggregation of RSS/ATOM data
* 简洁而有意义的 URLs
* 支持发布为 weblog
* RESTian (preferred) 或者 XML Webservice APIs
* 一些社会性网络元素
有幸再次见到Michael Chen
昨天有幸再次见到Michael Chen,他这个人真的很平实。
他说,我这个东西不是想做个框架,就是想提供一个客户端的异步通讯的工具。
看了这篇文章,更加加深了我对他的认同,他也认为应用决定使用什么技术,Ajax再火,在目前的xmlhttp+javascript的不完全可靠实现下也只能用在一写改善用户体验的小地方,全局的应用只不过是被技术冲昏了头脑。
我昨天和郑浩也在讨论同样的问题,我们都同意两个重要的标准:
1、技术要改变用户体验。如更好、更快捷、更清晰。这是一种功能指标。
2、技术要带来性能的提升,或者硬件的节省。因为性能我们觉得是技术的重要评价指标。当然首先要保证稳定。
而现在更多看到戴着幽雅帽子的编程技术,总是充斥着复用的话题,但是说实话,感觉真正的复用太少了,更多的是一种技术狂热,或者Open狂热。
所以我想用一个名词形容他们,“OpenMania”,开源综合症,中间还是有不少可怕的狂热症状的,不过郑浩说的很好,患了此症的人都是好人,而且是大好人。
这是闲话。
上午花了些时间把buffalo的js给精简了一下,成果不算很明显:
buffalo.js(12,007Byte) ->> buffalo_shrink.js(8,725byte)
xmlcallback.js(3,732Byte) ->> xmlcallback_shrink.js(2,785byte)
等测试完毕发给Michael Chen。
要这么想,接近缩小了1/3,也就是说带宽可以……我已经OpenMania了![]()
JavaServer Faces对决Tapestry
JavaServer Faces对决Tapestry
面对面的对比
作者:Phil Zoio 发布于The Server Side
原链接:
http://www.theserverside.com/articles/article.tss?l=JSFTapestry
本人翻译了其中一小部分,如果侵犯版权请通知我,谢谢。
很有趣,里面提出是一种实现(Hibernate、Spring)更能推动产业呢?还是一个标准(JSR)呢?很难回答。
Tapestry的分离方式非常优雅,后来被很多其它实现所参照,但Tapestry是做的最好的。你甚至可以用Dreamweaver来写模版,这对于那种美工不懂JSP、JAVA的团队非常有效,静态的预览也很容易。
而JSF对于组件化的推动是非常有效的,派生了很多好的页面组件,这是非常好的重用思想。比如IBM就把JSF和SDO结合,产生的东西绝对令人印象深刻(在加上Ajax实现)。
本文开头说明Struts作为一个MVC实现已经有点越发老迈了,日落西山是早晚的事。而新一代的MVC,象Web Work那些都是更佳的实践。不过JSF和Tapestry提出的上面两个优雅的解决对表现层更加友好,所以要对比一下。
文中对比了Tepestry 3.0.3和JSF 1.1。大家注意Tapestry 4已经进入beta阶段,而且变化是翻天覆地的,里面也提及了一些。
文章很长,看起来还是有点累的。不过比起学习两个技术,看看这种文章对你学习之前是个很好的指导。
标准1:页面开发
Tapestry的可融入标准HTML的能力区别于其它框架,是最有价值的功能。
标准2:Java编程模型
JSF为创建程序类提供了直观且具有弹性的编程模型,相对于Tapestry中一些奇怪的设置要自由得多。
标准3:请求(Request)处理生命周期
JSF更容易访问,而Tapestry的方式更适合于复杂的需求,它允许人们为需求中的单独操作定制生命周期。
标准4:导航
两个框架都有怪癖;作者偏向于Tapestry的基于编码的方式来导航。
标准5:事件处理
JSF受益于值变化事件监听器。对于Tapestry,当事件处理逻辑是逐个页面设定的,这个生命周期事件处理模型会更适合。而JSF更适合于对整个系统整体设定的生命周期事件处理。
标准6:组件状态管理
Tapestry有效的组件状态管理机制,使人们对它的能力和适用范围有足够的信心。对于不需要高性能的程序,重绕(rewind,Tepestry的一个毛病)问题是你愿意摆脱的。
标准7:标准组件
Tapestry提供了领先的标准组件集,而JSF得益于大量的第三方组件。
标准8:组件开发
在Tepestry中进行自定义组件开发相对容易于JSF。
标准9:验证和转换
JSF在概念上占有优势。但是Tapestry在客户端验证支持上挽回了弱势,它具有更加的错误管理机制,和更多的系统外验证的实现。
标准10:国际化
Tepestry的优势在于紧凑的格式,而且它的国际化页面可以进行预览。
标准11:可测试性
相对少的框架依赖使在JSF中进行受控bean单元测试比Tepestry页面类单元测试更加容易。
标准12:开发者获得的效率提升
由于工具的愈发面面俱到和易于使用,JSF的开发效率可以得到提升。对于那些喜欢以代码为中心的开发者,Tapestry可能会更有效率。
标准13:易于学习
JSF框架对于一般开发者更容易上手,虽然Tapestry中的模版创建很容易上手(但是它的学习曲线更难,资料也不全,且正在从3升级到4,有翻天覆地的变化)。
标准14:业界支持
JSF是个工业标准,所以受到广泛的业界支持,他更容易吸引IT经理人和开发者。(里面说JSF会慢慢好找工作,当然Struts还是最大需求。而Tapestry估计不会作为招聘要求的技能。)
标准15:可扩展性
JSF提供了比Tapestry 3更加优雅的扩展机制。Tapestry 4会很大程度上改进框架的这种能力。
CSS中的一些有用技术
<style type="text/css">
/* Serve gif images to IE/Win pre version 7 */
.i1,
.i2 { background-image:url(css/borders.gif); }
.bt,
.bt div,
.bb,
.bb div { background-image:url(css/box.gif); }
/* Set a height to fix up some rendering issues. */
.i1,
.i3 { height:1px; }
</style>
<![endif]–>
<FRAME id="top" src="top.htm" scrolling="no" target="body">
<FRAMESET id="main" name="main" cols="200,9,*" frameSpacing="0" frameBorder="NO">
<FRAME name="left" src="left.htm" scrolling="auto" target="body">
<FRAME name="control" src="control.htm" scrolling="no">
<FRAME name="body" id="body" src="userlist.htm" scrolling="yes">
</FRAMESET>
</FRAMESET>
{
flag = !flag;
if(flag)
{
if(screen.width>1024)
window.top.document.getElementById("main").cols="200,9,*";
else if(screen.width>800)
window.top.document.getElementById("main").cols="200,9,*";
else
window.top.document.getElementById("main").cols="160,9,*";
GEId("menuSwitch1").src=’images/ej1_30.gif’;
GEId("menuSwitch1").title=’隐藏’;
}
else
{
window.top.document.getElementById("main").cols="0,9,*";
GEId("menuSwitch1").src=’images/ej1_32a.gif’;
GEId("menuSwitch1").title=’显示’;
}
}
function high(which){
theobject=which
which.style.opacity=1
highlighting=setInterval("highlightit(theobject)",50)
}
function low(which){
which.style.opacity=0.25
clearInterval(highlighting)
which.filters.alpha.opacity=25
}
function highlightit(that){
if (that.filters.alpha.opacity<100){
that.filters.alpha.opacity+=10
}
else if (window.highlighting)
clearInterval(highlighting)
}
</script>
说说Displaytag

继续在Open-open.com逛,看到排名很靠前的一个java taglib项目。因为一直觉得taglib没产生什么有意义的东西,只不过是规范化了很多,看到排名靠前的taglib挺奇怪,就仔细看了看。
发现原来是个表格组件。前一段时间看讲座对Dorado那个界面比较感兴趣,使用了Ajax和组件化的表格技术,数据对象通过Javascript+dom解析,类似IBM的SDO概念。觉得如果能够真正的弄好,这种可服用的表格组件非常有前途。
当然SDO已经在IBM的JSF组件里面应用了,帮定起来真的很方便,而且客户端的体验也非常的好。可是JSF的最大缺陷就是手动开发太麻烦了,培植非常繁琐,所以就依赖于IDE来自动实现JSF组件的配置,所以JSF的IDE都是由背景的,代表某一方利益的东西。比如SUN的NetBeans、IBM的那个什么5.1,而我喜欢用的Eclipse下面还没有很好的辅助IDE,Nitrox新版支持JSF了,可是没有破解,正版又老贵,Myeclipse 4.0支持了JSF,但看了看很初级。
撤了老远,其实我想说我对这种实现的很Fine的组建太感兴趣了。
马上去它的网站看:
http://displaytag.sourceforge.net/
首页的几张截图非常吸引人,它产生的表格看起来非常的棒!
听Open-open介绍,这个东西和Struts结合很顺畅,我们的项目用的Struts+Hibernate+Spring,马上加进来试验。
遇上问题,session里面的变量访问不到,很奇怪,这个东西难住我了,找不到问题。看了它们的PDF,本以为会比网站讲得详细,后来发现不过就是网站的内容的PDF版本,基本也就是个入门指南,可怜。
网站总提到TestList这个东西用来测试,找不到这个类,下了它的源码,发现在源码的例子中有,产生测试List。
然后就用这个TestList测试了一下分页、排序、导出其它格式这些功能,发现非常吸引人,一下子觉得发现了宝藏!
然后不管是否能在我们项目应用,开始修改css,把它弄到我们的项目里,然后问项目其它同仁为何不能显示出我们的List。
修改Css很顺手,嘿嘿,目前我改css已经驾轻就熟了,很快修改出自己的漂亮的样式,很满足,哈哈。
而后,我的朋友郑浩发现了不能显示的问题,因为我们用了Hibernate,它返回的List是离线的,访问的时候需要用iterator访问,可能Displaytag的机制问题,所以无法访问到。
解决方法是每次new一个新的List,复制一遍再过去。我考!这是多大的浪费呀。把它放到DAO是不可以的,这样DAO移植后绝对是浪费,把它放到bussiness层也不合理,放到MVC的Controller还差不多,但是也感觉浪费的利害。
这时有些失望,所以去Google下,发现无数人说到这个问题。尤其是使用它的自动分页,每次如果取出所有的,然后复制List,估计性能会彻底完蛋!
所以,有些失望,Displaytag最有用的功能aotopagging不能使用了……
为了做试验,进一步修改,不用它的自动分页,但是修改了MVC,让它可以访问到一个复制过的List,来显示数据。配合刚才修改的css,效果和以前的Struts tag不相上下。(靠,完全是写css的缘故,这个有什么兴奋的!)
它的表格的控制都是英文的,应该可以中文。然后google,和问郑浩,他们用了如下代码:
<display:table name="list" width="100%" cellspacing="0" cellpadding="0" class="liebiao" pagesize="15">
<display:setProperty name="basic.msg.empty_list">没有可显示的内容</display:setProperty>
<display:setProperty name="paging.banner.placement">bottom</display:setProperty>
<display:setProperty name="paging.banner.full"><span class="liebiao">[<a href="{1}">首页</a>/ <a href="{2}">前一页</a>] {0} [ <a href="{3}">下一页</a>/ <a href="{4}">最后一页 </a>]</span></display:setProperty>
<display:setProperty name="paging.banner.first"><span class="liebiao">[首页/前一页] {0} [<a href="{3}">下一页</a> <a href="{4}">最后一页</a>]</span></display:setProperty>
<display:setProperty name="paging.banner.all_items_found"><span class="liebiao"><br><br>本栏目共{0}条,已经全部列出</span></display:setProperty>
<display:setProperty name="paging.banner.onepage"><span></span></display:setProperty>
<display:setProperty name="paging.banner.one_item_found"><span class="liebiao">共一条,已经列出</span></display:setProperty>
<display:setProperty name="paging.banner.last"><span class="liebiao">[<a href="{1}">首页</a>/ <a href="{2}">前一页</a>] {0} [下一页/最后一页]</span></display:setProperty>
<display:setProperty name="paging.banner.some_items_found"><span class="liebiao"><br><br>共有{0}条,显示第{2}至{3}条<br></span></display:setProperty>
<display:setProperty name="paging.banner.page.link"><a href="{1}" title="前往第{0}页">{0}</a></display:setProperty>
<display:column property="title" title="标 题" href="detail.jsp" paramId="id" paramProperty="id" maxLength="10" width="40%" align="left"/>
<display:column property="reportername" title="作者" maxLength="4" width="20%" align="left"/>
<display:column property="readtimes" title="阅读次数" align="left"/>
<display:column property="newsdate" decorator="cn.gov.bjmy.util.SimpleDateDecorator" title="新闻日期" width="16%" align="left"/>
</display:table>
哈哈,这么用真的够累。不过想了想,在中小项目,利用它的自动分页还是不错的。
不过每次设置太麻烦了,查阅了下,1.0版本支持用displaytag.properties配置了,这样可以全局使用。
displaytag.properties的内容如下:(那些中文我已经转码了,使用了PropertiesEditor,这个Eclipse插件自动转码非常方便!)
basic.msg.empty_list=\u6ca1\u6709\u53ef\u663e\u793a\u7684\u5185\u5bb9
paging.banner.placement=bottom
paging.banner.full=<div class="pagelinks">[<a href="{1}">\u9996\u9875</a>/ <a href="{2}">\u524d\u4e00\u9875</a>] {0} [ <a href="{3}">\u4e0b\u4e00\u9875</a>/ <a href="{4}">\u6700\u540e\u4e00\u9875 </a>]</div>
paging.banner.first=<div class="pagelinks">[\u9996\u9875/\u524d\u4e00\u9875] {0} [<a href="{3}">\u4e0b\u4e00\u9875</a> <a href="{4}">\u6700\u540e\u4e00\u9875</a>]</div>
paging.banner.all_items_found=<div class="pagebanner"><br><br>\u672c\u680f\u76ee\u5171{0}\u6761\uff0c\u5df2\u7ecf\u5168\u90e8\u5217\
u51fa</div>
paging.banner.onepage=<div class="pagelinks">{0}</div>
paging.banner.one_item_found=<div class="pagebanner">\u5171\u4e00\u6761\uff0c\u5df2\u7ecf\u5217\u51fa</div>
paging.banner.last=<div class="pagelinks">[<a href="{1}">\u9996\u9875</a>/ <a href="{2}">\u524d\u4e00\u9875</a>] {0} [\u4e0b\u4e00\u9875/\u6700\u540e\u4e00\u9875]</div>
paging.banner.some_items_found=<div class="pagebanner">\u5171\u6709{0}\u6761\uff0c\u663e\u793a\u7b2c{2}\u81f3{3}\u6761</div>
paging.banner.page.link=<a href="{1}" title="\u524d\u5f80\u7b2c{0}\u9875">{0}</a>
export.banner=<div class="exportlinks">\u5bfc\u51fa\u4e3a\u5176\u5b83\u683c\u5f0f: {0}</div>
export.pdf=true
export.csv=false
把这个文件放到Web项目的Class目录下就可以了。解决了问题了。
用了下导出功能,支持pdf需要把itext-0.99.jar拷贝到WEB-INF/lib下面,然后再propertis配置中“export.pdf=true”。
不过发现这个用不了,后来发现原来是无法解析Struts的.do,我都是映射到/去的,而我的jsp文件不在/下面,所以路径出了问题。查了下,用这个参数指定,“requestURI="getUser.do?back=yes"”就可以了,里面是我用的struts的action的路径。
修改以后,自动排序和导出都正常了,不过发现导出csv的时候后缀是.do,靠,禁用它。(BTW:集图的时候天天CSV,哈哈,别的地方估计不常用吧。怀念COC,现在BOB却很少去)
下面是全部可运行的一个代码:
<display:table name="tablecontent" class="<%=lClass%>" defaultsort="1"
defaultorder="descending" export="true"
requestURI="getUser.do?back=yes">
<display:column property="userId" title="ID" sortable="true"
headerClass="sortable" />
<display:column property="name" sortable="true" headerClass="sortable" />
<display:column property="realname" />
<display:column property="password" sortable="true"
headerClass="sortable" />
<display:column property="addr" title="Comments" />
</display:table>
对比一下Struts下面的相同代码:
<logic:iterate name="users" id="userlist" scope="session">
<tr>
<td class="frh"><bean:write name="userlist" property="userId"
filter="true" /></td>
<td class="fr"><bean:write name="userlist" property="name"
filter="true" /></td>
<td class="frh"><bean:write name="userlist" property="realname"
filter="true" /></td>
<td class="fr"><bean:write name="userlist" property="password"
filter="true" /></td>
<td class="frh"><bean:write name="userlist" property="addr"
filter="true" /></td>
<td class="fr"><bean:write name="userlist" property="level"
filter="true" /></td>
<td class="frh"><a
href="/viewUser.do?id=<bean:write name="userlist" property="userId" filter="true" />">详细</a></td>
<td class="fr"><a
href="/deleteUser.do?id=<bean:write name="userlist" property="userId" filter="true" />">删除</a></td>
</tr>
</logic:iterate>
对比下发现差距也不大吧,不过,有了自动排序和导出,看起来满酷的。
酷是一方面,失望才是更大的。简单尝试和运行还是留下了遗憾,记录一下,如果有心人看到可以去改进:
1、不能读取Hibernate返回的离线List,这是个硬伤!不知道是不是我的使用问题。但是如果必须是在线的,那么内存浪费巨大。大的项目就用不了了!
2、所有的自动排序,自动分页,导出都是通过传统的服务器回写来实现的,看似酷,但是实际上过于简单。在Ajax很火爆的现在,技术有点落后了。
3、没有结合SDO这样的数据模型。其实和Ajax那个问题一样,没有SDO就不是组件模型。而只是一个傻瓜化的封装而已。
4、网站的文档不够详细,也不严谨,我觉得开源没有好的文档就永远火不起来。
5、我很欣赏所有的样式都依赖于css,而且东西很好扩展。但是居然网上有人抨击这种方式。我想反问那些满脑子程序的人,那些看不起美工的程序员,你们懂得程序是艺术么?你不懂css、不懂web standards、不懂xhtml、不懂xml,还有什么可混的么?
6、另一个问题。分页实现的太不优雅了。也许是taglib的限制。一次读取所有的数据,并且要求是在线的,仅仅为了分页,这太恐怖了。Hibernate不能这么用,JDBC也不能这么用!好的分页封装看来还要用别的。如此一看,这里面除了CSS提供看起来很好的表格外就只有导出功能了。
7、而悲观的是,导出功能除了花哨以外没有别的作用了,而导出功能还有更好的选择吧。
所以,一句话说。上手还算容易,可是深入难,看不到好的手册。Sample写的不错,可是缺乏与其它框架结合的例子,比如Hibernate、Struts。好多人说它好用,但是估计都是从简单的角度考虑的,性能的考虑是个问题。配置看起来还算容易,可是配置却没有文档来介绍,只能摸着石头过河。
所以,仅仅是结绳记事。小项目可以用。大项目用它没法发挥它带来的优势,只能使用可怜的一点点功能(我的例子只用了自动排序和导出)。不过开源项目,谁知道,没准麻雀变凤凰了呢。毕竟它的思想是对的,提供可用的Web组件(它声称要实现table、Tree等等),我也想找到一个这样的组件,那样就真的可以轻松些工作了!
等待那一天!