- 浏览: 4110238 次
最新评论
美丽的错误
“善意的谎言、美丽的错误”,这些事情在我们的生活及工作经常都在发生。最近花了三天多的时间学习了EasyJF开源官网的Blog程序源码,振奋人心之处就不说了,看过的都知道。同时也存在很多的错误,这些错误有的是由我不知何时亲自导演,这里就捡一些“美丽”的错误及Bub来说说,为了自己以后不再犯这样错误。
技术构架:EasyJWeb+Spring2+JPA 视图模板使用:Velocity
1、很Cool的循环 来自:Blog的圈子显示 错误等级★★★★★
tr>
#foreach($!infoin$subList)
td>
$!info.title
td>
#end
tr>
#end
其中$myOnwerCircle是从后台传过来的一个List。这个程序是遍历一个列集合,把集合的元素循环显示到
但无论如何,都无法得到想要的结果,由于准备换成类似$BlogQuery.circleQuery.user($blog.owner).number(-1).list这样的标签来查询数据,所以一直认为是标签设计的问题。经过后来的一阵折腾证明是脚本写法的问题,你知道是哪些地方出的问题了吗?先说明:$!CommUtil.toRowChildList这个标签没任何问题。
2、easy的echo 来自:Blog的圈子显示 错误等级★★★★★☆
页面内容:
这里打算显示圈子的主题以及圈子下面的blog数量。但如果不亲身体会,鬼都不知道他会给你显示什么出来。你知道吗?
3、非菜鸟的equals 来自:文章及照片评论
数据结构永远就比算法重要,这个是不容质疑的,可以搞出很漂亮的算法,但没有一个好的模型,你就瞎忙吧。你觉得上面的代码哪儿错了?
4、一不小心就OO及ORM 来自:评论系统设计 ★★☆
@javax.persistence.Inheritance(strategy=javax.persistence.InheritanceType.JOINED)
@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@FormPO(inject="sequence,content,owner")
publicabstractclassReviewimplementsjava.io.Serializable...{
@Id
@GeneratedValue(strategy=GenerationType.TABLE)
privateLongid;//主键
..}
@FormPO(inject="blogOwner,inputUser")
@Entity
@javax.persistence.MappedSuperclass
publicclassBlogReviewextendsReviewimplementsIBlogComponment...{
@POLoad(name="userId")
@ManyToOne
privateUserblogOwner;
privateStringinputUser;
}
@FormPO(inject="newsDoc")
@Entity
publicclassBlogNewsReviewextendsBlogReview...{
@POLoad(name="docId")
@ManyToOne
@JoinColumn
privateBlogNewsDocnewsDoc;//评论的对象
}
publicinterfaceIBlogReviewDAOextendsGenericDAOBlogReview>...{
}
privateIBlogReviewDAOdao;
publicBlogReviewgetBlogReview(Longid)...{
returnthis.dao.get(id);
}
评论系统,管理员能管理所有评论,能对Blog文章、像册等进行评论。
这个示例要是搞好了可以当成是一个比较经典的OO及ORM示例,但是现在这样的写法你知道JPA会创建几张表吗,各个表之间关联字段是是什么? Service中的getBlogReview返回什么?答对了有奖。
4、有事无事的事务 来自blog信息发表
aop:config>
aop:pointcutid="saveMethods"
expression="execution(*com.easyjf.blog.service.BlogNewsDocService.*(..))"/>
aop:advisoradvice-ref="txBlogServiceAdvice"
pointcut-ref="saveMethods"/>
aop:config>
tx:adviceid="txBlogServiceAdvice"
transaction-manager="transactionManager">
tx:attributes>
tx:methodname="wirteBlog*"propagation="REQUIRES_NEW"/>
tx:methodname="update*"propagation="REQUIRES_NEW"/>
tx:methodname="get*"propagation="SUPPORTS"
read-only="true"/>
tx:methodname="query*"propagation="SUPPORTS"
read-only="true"/>
tx:methodname="*"propagation="REQUIRED"/>
tx:attributes>
tx:advice>
代码:
this.service.addBlogReview(review);
if(reviewinstanceofBlogNewsReview)...{
BlogNewsReviewr=(BlogNewsReview)review;
//this.docService.updateBlogNewsDoc(r.getNewsDoc());
this.htmlGenerator.process(r.getNewsDoc());
r.getNewsDoc().getReviews().remove(r);//很怪也滑稽的设计
returnnewPage("html",r.getNewsDoc().getStaticUrl(),"html");
}
为什么Blog更新后出来的html页面还是上一次更新的内容?为什么在添加新闻的评论里面要加一句r.getNewsDoc().getReviews().remove(r),是无奈还是真的滑稽。
5、究竟是要IP、IQ还是IC卡 来自:blog首页 ☆
publicPagedoInit(WebFormform,Modulemodule)...{
form.addResult("blogInfoService",this.blogInfoService);
form.addResult("bqu",bqu);
form.addResult("bdqu",bdqu);
form.addResult("bcqu",bcqu);
form.addResult("bb”bb);
if(UserContext.getUser()!=null)...{
form.addResult("user","true");
}
returnnewPage("index","/blog/index.html");
}
前台页面
#foreach($infoin$bcu.thisYear.doc.list)
$info.title
#end
这段代码是想把一些实用工具比如bb,bq,bcqu,bdqu等暴露给页面,由页面人员根据自己的喜爱想要展示什么数据就展示什么数据。严格来说,这没什么错,只是害苦了美工MM而已,难怪她们不喜欢呆办公室。
7、真空还是没空(is NULL or EMPTY) 来自Blog发布程序
QueryObjectquery=newQueryObject();
java.util.Calendarca=java.util.Calendar.getInstance();
ca.setTimeInMillis(ca.getTimeInMillis()-blogIntervals*1000);
query.addQuery("(obj.updateTimeorobj.updateTimeisEMPTY)",newObject[]...{ca.getTime()});
query.setPageSize(-1);
Listlist=this.blogService.getBlogInfo(query).getResult();
知道执行这段代码生成的SQL吗?一定会让你大吃一惊,把EMPTY改成NULL难道是我们想要的?
8、F想要干什么 来自:blog新闻管理
functioninit()...{
F=newFORM("blogNewsDoc.ejf","ListForm");
windowInit();
}
window.onload=init;
F.doList=F.doOneCommand("listDoc");
古老的new FORM曾经让我们非常欣喜,但为什么现在换来的却是大家抱怨呢?代码有时候也是有生命的,你如何都不用心好好对待他,他怎么会一直按部就班的运转呢?
9.想擦掉js给你留下的伤疤吗 来自blog管理后台
formname=”ListForm”id=”ListForm”/>
inputtype="button"name="submit"value="彻底删除"onClick="F.doRemove();"class="pushbutton"style="cursor:pointer">
form>
F.doRemove()里面会执行类似$(“ListForm”).submit()这样的代码来提交表单。
你觉得这段代码能让你真正的彻底删除掉js曾经留给你的诸多痛苦回忆吗?你继续痛哭吧,呵呵。其实我们只要仔细看一看就知道问题了。w3c可不是war3,不能随便乱来的。
10.你拥有什么? 来自Blog域对象
@MappedSuperclass
publicclassAbstractBlogimplementsSerializable...{
@Id
@GeneratedValue(strategy=GenerationType.TABLE)
protectedLongid;
@OneToOne
protectedUseronwer;
@Column(length=200)
protectedStringtitle;//标题
@Column(length=200)
protectedStringsubtitle;//副标题
}
页面标签:
#foreach($info$BlogQuery.photoQuery.blogOwner($blog.owner).number(6).orderBy("inputTime").desc().list)
#end
呵呵,今天就这么多了,先听听大家的高见!下次发几个能让人眼前一亮的。
“善意的谎言、美丽的错误”,这些事情在我们的生活及工作经常都在发生。最近花了三天多的时间学习了EasyJF开源官网的Blog程序源码,振奋人心之处就不说了,看过的都知道。同时也存在很多的错误,这些错误有的是由我不知何时亲自导演,这里就捡一些“美丽”的错误及Bub来说说,为了自己以后不再犯这样错误。
技术构架:EasyJWeb+Spring2+JPA 视图模板使用:Velocity
1、很Cool的循环 来自:Blog的圈子显示 错误等级★★★★★
tr>
#foreach($!infoin$subList)
td>
$!info.title
td>
#end
tr>
#end
其中$myOnwerCircle是从后台传过来的一个List。这个程序是遍历一个列集合,把集合的元素循环显示到
但无论如何,都无法得到想要的结果,由于准备换成类似$BlogQuery.circleQuery.user($blog.owner).number(-1).list这样的标签来查询数据,所以一直认为是标签设计的问题。经过后来的一阵折腾证明是脚本写法的问题,你知道是哪些地方出的问题了吗?先说明:$!CommUtil.toRowChildList这个标签没任何问题。
2、easy的echo 来自:Blog的圈子显示 错误等级★★★★★☆
页面内容:
这里打算显示圈子的主题以及圈子下面的blog数量。但如果不亲身体会,鬼都不知道他会给你显示什么出来。你知道吗?
3、非菜鸟的equals 来自:文章及照片评论
数据结构永远就比算法重要,这个是不容质疑的,可以搞出很漂亮的算法,但没有一个好的模型,你就瞎忙吧。你觉得上面的代码哪儿错了?
4、一不小心就OO及ORM 来自:评论系统设计 ★★☆
@javax.persistence.Inheritance(strategy=javax.persistence.InheritanceType.JOINED)
@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@FormPO(inject="sequence,content,owner")
publicabstractclassReviewimplementsjava.io.Serializable...{
@Id
@GeneratedValue(strategy=GenerationType.TABLE)
privateLongid;//主键
..}
@FormPO(inject="blogOwner,inputUser")
@Entity
@javax.persistence.MappedSuperclass
publicclassBlogReviewextendsReviewimplementsIBlogComponment...{
@POLoad(name="userId")
@ManyToOne
privateUserblogOwner;
privateStringinputUser;
}
@FormPO(inject="newsDoc")
@Entity
publicclassBlogNewsReviewextendsBlogReview...{
@POLoad(name="docId")
@ManyToOne
@JoinColumn
privateBlogNewsDocnewsDoc;//评论的对象
}
publicinterfaceIBlogReviewDAOextendsGenericDAOBlogReview>...{
}
privateIBlogReviewDAOdao;
publicBlogReviewgetBlogReview(Longid)...{
returnthis.dao.get(id);
}
评论系统,管理员能管理所有评论,能对Blog文章、像册等进行评论。
这个示例要是搞好了可以当成是一个比较经典的OO及ORM示例,但是现在这样的写法你知道JPA会创建几张表吗,各个表之间关联字段是是什么? Service中的getBlogReview返回什么?答对了有奖。
4、有事无事的事务 来自blog信息发表
aop:config>
aop:pointcutid="saveMethods"
expression="execution(*com.easyjf.blog.service.BlogNewsDocService.*(..))"/>
aop:advisoradvice-ref="txBlogServiceAdvice"
pointcut-ref="saveMethods"/>
aop:config>
tx:adviceid="txBlogServiceAdvice"
transaction-manager="transactionManager">
tx:attributes>
tx:methodname="wirteBlog*"propagation="REQUIRES_NEW"/>
tx:methodname="update*"propagation="REQUIRES_NEW"/>
tx:methodname="get*"propagation="SUPPORTS"
read-only="true"/>
tx:methodname="query*"propagation="SUPPORTS"
read-only="true"/>
tx:methodname="*"propagation="REQUIRED"/>
tx:attributes>
tx:advice>
代码:
this.service.addBlogReview(review);
if(reviewinstanceofBlogNewsReview)...{
BlogNewsReviewr=(BlogNewsReview)review;
//this.docService.updateBlogNewsDoc(r.getNewsDoc());
this.htmlGenerator.process(r.getNewsDoc());
r.getNewsDoc().getReviews().remove(r);//很怪也滑稽的设计
returnnewPage("html",r.getNewsDoc().getStaticUrl(),"html");
}
为什么Blog更新后出来的html页面还是上一次更新的内容?为什么在添加新闻的评论里面要加一句r.getNewsDoc().getReviews().remove(r),是无奈还是真的滑稽。
5、究竟是要IP、IQ还是IC卡 来自:blog首页 ☆
publicPagedoInit(WebFormform,Modulemodule)...{
form.addResult("blogInfoService",this.blogInfoService);
form.addResult("bqu",bqu);
form.addResult("bdqu",bdqu);
form.addResult("bcqu",bcqu);
form.addResult("bb”bb);
if(UserContext.getUser()!=null)...{
form.addResult("user","true");
}
returnnewPage("index","/blog/index.html");
}
前台页面
#foreach($infoin$bcu.thisYear.doc.list)
$info.title
#end
这段代码是想把一些实用工具比如bb,bq,bcqu,bdqu等暴露给页面,由页面人员根据自己的喜爱想要展示什么数据就展示什么数据。严格来说,这没什么错,只是害苦了美工MM而已,难怪她们不喜欢呆办公室。
7、真空还是没空(is NULL or EMPTY) 来自Blog发布程序
QueryObjectquery=newQueryObject();
java.util.Calendarca=java.util.Calendar.getInstance();
ca.setTimeInMillis(ca.getTimeInMillis()-blogIntervals*1000);
query.addQuery("(obj.updateTimeorobj.updateTimeisEMPTY)",newObject[]...{ca.getTime()});
query.setPageSize(-1);
Listlist=this.blogService.getBlogInfo(query).getResult();
知道执行这段代码生成的SQL吗?一定会让你大吃一惊,把EMPTY改成NULL难道是我们想要的?
8、F想要干什么 来自:blog新闻管理
functioninit()...{
F=newFORM("blogNewsDoc.ejf","ListForm");
windowInit();
}
window.onload=init;
F.doList=F.doOneCommand("listDoc");
古老的new FORM曾经让我们非常欣喜,但为什么现在换来的却是大家抱怨呢?代码有时候也是有生命的,你如何都不用心好好对待他,他怎么会一直按部就班的运转呢?
9.想擦掉js给你留下的伤疤吗 来自blog管理后台
formname=”ListForm”id=”ListForm”/>
inputtype="button"name="submit"value="彻底删除"onClick="F.doRemove();"class="pushbutton"style="cursor:pointer">
form>
F.doRemove()里面会执行类似$(“ListForm”).submit()这样的代码来提交表单。
你觉得这段代码能让你真正的彻底删除掉js曾经留给你的诸多痛苦回忆吗?你继续痛哭吧,呵呵。其实我们只要仔细看一看就知道问题了。w3c可不是war3,不能随便乱来的。
10.你拥有什么? 来自Blog域对象
@MappedSuperclass
publicclassAbstractBlogimplementsSerializable...{
@Id
@GeneratedValue(strategy=GenerationType.TABLE)
protectedLongid;
@OneToOne
protectedUseronwer;
@Column(length=200)
protectedStringtitle;//标题
@Column(length=200)
protectedStringsubtitle;//副标题
}
页面标签:
#foreach($info$BlogQuery.photoQuery.blogOwner($blog.owner).number(6).orderBy("inputTime").desc().list)
#end
呵呵,今天就这么多了,先听听大家的高见!下次发几个能让人眼前一亮的。
<!-- Baidu Button BEGIN --> <script>window._bd_share_config = { "common": { "bdSnsKey": {}, "bdText": "", "bdMini": "1", "bdMiniList": false, "bdPic": "", "bdStyle": "0", "bdSize": "16" }, "share": {} }; with (document) 0[(getElementsByTagName('head')[0] || body).appendChild(createElement('script')).src = 'http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion=' + ~(-new Date() / 36e5)];</script><!-- Baidu Button END --><!--192.168.100.33--><!-- Baidu Button BEGIN --><script type="text/javascript" id="bdshare_js" data="type=tools&uid=1536434"></script><script type="text/javascript" id="bdshell_js"></script><script type="text/javascript"> document.getElementById("bdshell_js").src = "http://bdimg.share.baidu.com/static/js/shell_v2.js?cdnversion=" + Math.ceil(new Date()/3600000) </script><!-- Baidu Button END -->
核心技术类目
- 个人资料
- 访问:1380197次
- 积分:83462分
- 排名:第4名
- 原创:7468篇
- 转载:0篇
- 译文:0篇
- 评论:81条
- 文章存档
-
阅读排行
- GB2312汉字拼音对照表(7397)
- 手机"用户界面和多媒体"版面有价值问题整理[j2medev.com][0406更新](7255)
- [SP]梦网masterSP模式下的sp生存(4871)
- [转]FTP搜索引擎的设计与实现(优化版)(4380)
- [dotNET]“ThreadPool 对象中没有足够的自由线程来完成操作”的现象和解决办法(4011)
- 《ASP.NET 2.0应用开发技术》9月份出版发行(3978)
- [收藏]C++大师Stan Lippman:我对中国程序员的忠告(3232)
- WinCVS中文版及中文使用手册(3061)
- zlib 与 libpng 的配置与使用 part 3 libpng的安装与生成PNG图片(3028)
- [收藏]深入浅出的《网络socket编程指南》(3028)
- 评论排行
- 推荐文章
- 最新评论
-
[C#]I/O完成端口的实现
allenltiverson: 有你这么2的人么。。。
-
创建一个MDB文件
liuqingyunwoniu: 额 楼主怎么复制这么多
-
字符集之间转换(UTF-8,UNICODE,Gb2312)
lvron: 确定是你的原创吗?
-
[收藏]C++大师Stan Lippman:我对中国程序员的忠告
kongguisheng: 重复排了85次?
-
[USTC]中科大备忘录
xiaowaiwaia: 作者想表达什么意思 没看懂
-
C++不是万能的
dujianwei110120: 这个写的相当不错,也很专业的哦!
-
[USTC]中科大备忘录
Sense_the_World: 你妹的..
-
[人物]USTC十大IT精英
wave_hack: 就几个人,有必要贴几遍吗?
-
我对SOA的反思:SOA架构的本质
JG_jiangguo: 复制这么多是为了凑字数么?
-
--=== 让你的程序开始说话(在VB中使用文字朗读引擎(TTS)技术)===--
dandanzmc: voicetext 1.0 type libary 丢失怎么办啊??谢谢、、、
相关推荐
点火:Laravel应用的美丽错误页面 对于在Laravel 5.5及更高版本上运行的Laravel应用程序,是一个漂亮且可自定义的错误页面。 这是所有Laravel 6应用程序的默认错误页面。 它还允许在上公开分享您的错误。 如果使用...
点火:Laravel应用程序的漂亮错误页面点火是运行在Laravel 5.5及更高版本上的Laravel应用程序的漂亮且可自定义的错误页面。 这是所有Laravel 6应用程序的默认错误页面。 I Ignition:Laravel应用程序的漂亮错误页面...
错误也是一种美丽.doc
OpinionzAlertView, 带有块的美丽定制警报视图 OpinionzAlertView 简介带有块的美丽定制警报视图。 从预定义图标中选择信息,警告,成功和错误通知。 自定义颜色或者设置所需图像。预览 安装###...
漂亮的姑娘喜欢穿美丽的衣服,丑姑娘也喜欢美丽的衣服,可ACCESS除了提供定制菜单与开关面版之外,不提供任何定制控键的功能。你如果想使用自己的按扭,得编写许多许多代码,非常麻烦。为什么,为什么你们总放着现成...
该软件包将通过漂亮的UI帮助您在本机应用程序中显示成功,警告,错误和信息消息。 例子 安装 npm install --save alerts-are-easy 警报很容易,需要来显示图标。 安装此对等依赖项并开始使用警报功能。 用法 ...
猫鼬美丽唯一验证用于Mongoose的插件,可将重复的错误转换为常规的Mongoose验证错误。 Mongoose的unique约束实际上依赖于MongoDB的unique索引。 这意味着,如果您具有这样的模式: mongoose . Schema ( { name : { ...
渐变是由社区贡献的美丽多色渐变集合 关于 这是一个由社区回馈社区的努力。 希望这将帮助您汲取灵感,并为您为自己的项目选择渐变提供资源。 贡献 向库中添加渐变非常简单。 所有渐变都是从根目录中的单个gradients....
当出现黄色的死亡屏幕时,用户会分心!! 把它们扔在美丽而又不同的页面上...让我们学习...
Kouki-个人博客的美丽和最小主题 Kouki适用于希望以令人愉悦且最小的方式显示其内容的发布者。 非常适合美食博客,摄影师,极简主义者,滚滚日志以及其他喜欢朴实WordPress主题的人。 非强制性主题选项可帮助您根据...
光环主题是一个美丽的深色主题,其中包括专注于长期工作而不会引起眼睛不适的变体。 现在可用于Visual Studio代码,超级终端,iTerm,Slack和失眠。 主题 Visual Studio程式码 超级终端 iTerm 松弛 失眠 贡献 ...
美丽的SkyBlock个人资料查看器 :rose: 通过该项目,您可以与其他玩家共享您的 SkyBlock个人资料,并快速了解自己的统计信息,技能,装甲,武器和配件。 网址: : 截屏贡献由于我不再积极维护该项目,因此不太可能...
Amber使构建Web应用程序变得快速,简单和令人愉悦-减少了错误,并提高了性能。 欢迎来到琥珀 Amber是一个以编写的Web应用程序框架,灵感来自Kemal,Rails,Phoenix和其他流行的应用程序框架。 Amber的目的不是创建...
用古兰经经文和美丽的大自然图片代替新的标签页。 经文和图片每小时随机生成一次。 您可以选择显示或隐藏您的热门网站。 您可以在找到Firefox扩展 下载 在添加chrome扩展名。 回历日期 您可以显示今天的回历日期和...
我的人生故事项目模块,其中包含美丽的雪景图片。 关于 看上面 维基百科 版本历史 不可用 资源 目前没有其他资源。 软件状态 我所有的作品都是免费的,有一些限制。 DRM(d igital [R estrictions中号anagement)不...
您还将在控制台中看到任何棉绒错误。yarn test 在交互式监视模式下启动测试运行程序。 有关更多信息,请参见关于的部分。yarn build 构建生产到应用程序build文件夹。 它在生产模式下正确捆绑了React,并优化了构建...
.Mail 实现了所有主要的电子邮件协议:POP、IMAP 和 SMTP,并在智能后端后面隐藏了实现细节和相当多的错误处理,使应用程序的使用尽可能轻松和顺畅。 ##Installation(如有必要,从 DotMail 的任何先前迭代中删除 ...
它应该可以正常工作,但是以错误处理和适当的Swift美丽为名,您可以在Shell模块中将Unix命令行工具公开为Swift 5 @dynamicCallable函数。 它应该可以正常工作,但是以错误处理和适当的Swift美丽为名,您可能希望以...
所以,即使在拍摄时犯了技术错误,在看到最终的照片时也无法觉察到失误之处,导致不断重复犯相同的错误。而使用数码相机时则可以通过背面的液晶显示屏当场看到拍摄结果,更容易把握失误的原因,提高摄影水平的速度比...
一个综合型的Direct3D示例程序,用键盘上W,A,S,D,I,J,K,L,↑,↓,←,→12个键加上鼠标在美丽的三维空间中翱翔。包括了Direct3D初始化,DirectInput输入处理,顶点缓存,光照与材质,文字输出,颜色,纹理贴图,...