美丽的错误

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

  “善意的谎言、美丽的错误”,这些事情在我们的生活及工作经常都在发生。最近花了三天多的时间学习了EasyJF开源官网的Blog程序源码,振奋人心之处就不说了,看过的都知道。同时也存在很多的错误,这些错误有的是由我不知何时亲自导演,这里就捡一些“美丽”的错误及Bub来说说,为了自己以后不再犯这样错误。

  技术构架:EasyJWeb+Spring2+JPA 视图模板使用:Velocity

 1、很Cool的循环 来自:Blog的圈子显示 错误等级★★★★★

#foreach($!subList in $!CommUtil.toRowChildList($myOnweCircle,2))
  
<tr>
 #foreach($!info in $subList)
 
<td>
$!info.title
</td>
 #end
<tr>
 #end

  其中$myOnwerCircle是从后台传过来的一个List。这个程序是遍历一个列集合,把集合的元素循环显示到<tr>中,第行最多显示两列<td>。

  但无论如何,都无法得到想要的结果,由于准备换成类似$BlogQuery.circleQuery.user($blog.owner).number(-1).list这样的标签来查询数据,所以一直认为是标签设计的问题。经过后来的一阵折腾证明是脚本写法的问题,你知道是哪些地方出的问题了吗?先说明:$!CommUtil.toRowChildList这个标签没任何问题。

2、easy的echo 来自:Blog的圈子显示 错误等级★★★★★☆
  页面内容:

<span class="strong0">$!info.title($!info.blogs.size())</span><br>


  这里打算显示圈子的主题以及圈子下面的blog数量。但如果不亲身体会,鬼都不知道他会给你显示什么出来。你知道吗?

 3、非菜鸟的equals 来自:文章及照片评论
  

String user =!"".equals(obj.getInputUser()) ? obj.getInputUser().getName() : "匿名用户"

  数据结构永远就比算法重要,这个是不容质疑的,可以搞出很漂亮的算法,但没有一个好的模型,你就瞎忙吧。你觉得上面的代码哪儿错了?

 4、一不小心就OO及ORM 来自:评论系统设计 ★★☆

@Entity
@javax.persistence.Inheritance(strategy 
= javax.persistence.InheritanceType.JOINED)
@Cache(usage
=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@FormPO(inject 
= "sequence,content,owner")
public abstract class Review implements java.io.Serializable {

 @Id
 @GeneratedValue(strategy 
= GenerationType.TABLE)
 
private Long id;// 主键
..}



@FormPO(inject
="blogOwner,inputUser")
@Entity
@javax.persistence.MappedSuperclass
public class BlogReview extends Review implements IBlogComponment {
 @POLoad(name
="userId")
 @ManyToOne
 
private User blogOwner;

 
private String inputUser;
}



@FormPO(inject
="newsDoc")
@Entity
public class BlogNewsReview extends BlogReview {
 @POLoad(name 
= "docId")
 @ManyToOne
 @JoinColumn
 
private BlogNewsDoc newsDoc;// 评论的对象

}


public interface IBlogReviewDAO  extends GenericDAO<BlogReview> {

}


 
private IBlogReviewDAO dao;
    
public BlogReview getBlogReview(Long id) {
  
return this.dao.get(id);
 }


  评论系统,管理员能管理所有评论,能对Blog文章、像册等进行评论。
这个示例要是搞好了可以当成是一个比较经典的OO及ORM示例,但是现在这样的写法你知道JPA会创建几张表吗,各个表之间关联字段是是什么? Service中的getBlogReview返回什么?答对了有奖。


 4、有事无事的事务 来自blog信息发表 
  

<!--事务配置-->
 
<aop:config>
  
<aop:pointcut id="saveMethods"
   expression
="execution(* com.easyjf.blog.service.BlogNewsDocService.*(..))" />
   
<aop:advisor advice-ref="txBlogServiceAdvice"
   pointcut
-ref="saveMethods" /> 
 
</aop:config>
 
<tx:advice id="txBlogServiceAdvice"
  transaction
-manager="transactionManager">
  
<tx:attributes>
   
<tx:method name="wirteBlog*" propagation="REQUIRES_NEW" />
   
<tx:method name="update*" propagation="REQUIRES_NEW" />
   
<tx:method name="get*" propagation="SUPPORTS"
    read
-only="true" />
   
<tx:method name="query*" propagation="SUPPORTS"
    read
-only="true" />
   
<tx:method name="*" propagation="REQUIRED" />
  
</tx:attributes>
 
</tx:advice>

代码:
this.service.addBlogReview(review);
 
if (review instanceof BlogNewsReview) {
   BlogNewsReview r 
= (BlogNewsReview) review;
   
//this.docService.updateBlogNewsDoc(r.getNewsDoc());
   this.htmlGenerator.process(r.getNewsDoc());
   r.getNewsDoc().getReviews().remove(r);
// 很怪也滑稽的设计
   return new Page("html", r.getNewsDoc().getStaticUrl(), "html");
 }


   为什么Blog更新后出来的html页面还是上一次更新的内容?为什么在添加新闻的评论里面要加一句r.getNewsDoc().getReviews().remove(r),是无奈还是真的滑稽。

 5、究竟是要IP、IQ还是IC卡 来自:blog首页 ☆
 

 后台Action代码
public Page doInit(WebForm form, Module module) {
  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");
  }

  
return new Page("index""/blog/index.html");
 }

前台页面
#foreach($info in $bcu.thisYear.doc.list)
$info.title
#end

  这段代码是想把一些实用工具比如bb,bq,bcqu,bdqu等暴露给页面,由页面人员根据自己的喜爱想要展示什么数据就展示什么数据。严格来说,这没什么错,只是害苦了美工MM而已,难怪她们不喜欢呆办公室。

 7、真空还是没空(is NULL or EMPTY) 来自Blog发布程序

业务层代码:
QueryObject query 
= new QueryObject();
java.util.Calendar ca 
= java.util.Calendar.getInstance();
ca.setTimeInMillis(ca.getTimeInMillis() 
- blogIntervals * 1000);  
query.addQuery(
"(obj.updateTime<? or obj.updateTime is EMPTY)",new Object[]{ca.getTime()});
query.setPageSize(
-1);  
List list 
= this.blogService.getBlogInfo(query).getResult();

知道执行这段代码生成的SQL吗?一定会让你大吃一惊,把EMPTY改成NULL难道是我们想要的?

 8、F想要干什么 来自:blog新闻管理 
 

Javascript脚本代码:
function init(){
   F
=new FORM("blogNewsDoc.ejf","ListForm");
   windowInit();
  }

  window.onload
=init;  
  F.doList 
= F.doOneCommand("listDoc");

 
  古老的new FORM曾经让我们非常欣喜,但为什么现在换来的却是大家抱怨呢?代码有时候也是有生命的,你如何都不用心好好对待他,他怎么会一直按部就班的运转呢?

 9.想擦掉js给你留下的伤疤吗 来自blog管理后台
 

  Html代码
<form name=”ListForm” id=”ListForm”/>
<input type="button" name="submit" value="彻底删除" onClick="F.doRemove();" class="pushbutton" style="cursor:pointer ">
</form>
     F.doRemove()里面会执行类似$(“ListForm”).submit()这样的代码来提交表单。


你觉得这段代码能让你真正的彻底删除掉js曾经留给你的诸多痛苦回忆吗?你继续痛哭吧,呵呵。其实我们只要仔细看一看就知道问题了。w3c可不是war3,不能随便乱来的。

10.你拥有什么? 来自Blog域对象 
 
  

@FormPO(disInject="id,owner,inputTime,readTimes,status,elite,updated,docNum,photoNum")
@MappedSuperclass
public class AbstractBlog implements Serializable 
 @Id
 @GeneratedValue(strategy 
= GenerationType.TABLE)
 
protected Long id;
 
 @OneToOne
 
protected User onwer;
 
 @Column(length 
= 200)
 
protected String title;// 标题

 @Column(length 
= 200)
 
protected String subtitle;// 副标题

}

页面标签:
#foreach($info $BlogQuery.photoQuery.blogOwner($blog.owner).number(
6).orderBy("inputTime").desc().list)

#end

  呵呵,今天就这么多了,先听听大家的高见!下次发几个能让人眼前一亮的。

 

Silverlight无法启动调试解决方案 Silverlight无法启动调试解决方案,自己测试总结的。 立即下载

相关推荐

Silverlight在IE中无法显示但在Firefox中正常的原因和解决办法

考虑到此问题的发生很难解决和解决方法的示例意义,特发在首页。问题提出:Silverlight在IE中无法显示并提示下载,在Firefox中正常系统环境:Vista, IE7对应版本:1.0 RC, 1.0 RTW, 1.1 Alpha Aug./Sept. Refresh现象描述:访问包含Silverlight的页面,提示下载并安装Silverlight,安装后显示安装成功,刷新页面后,仍然提示需

ASP DOT NET 4073

将Silverlight安装到正式机(Windows 2003 Server)上之后无法浏览?

     读者反应将编写好的Silverlight应用程序安装到Windows 2003正式机上之后无法浏览(看到的是一片空白),但是在开发阶段(VS2005)却都可以。    关于这个问题,笔者在将Silverlight安装到租用的Hosting时也发生过,其中一个主要的原因是在默认的状况下面,Win2003 Server并不支持 .xaml 档案MIME格式。    因此,

dotnetWalker的专栏 2529

Silverlight网站“运行后一片空白”的解决方案

      我近日在一次项目中,使用了ESRI的Silverlight API进行了开发。结果在进行网站部署时遇到了“运行后一片空白”的问题。现将解决办法如下:      如果您想在IIS服务器上使用Silverlight程序,需要使用xap、XAML文件类型,所以必须在IIS中注册xaml和xap的MIME文件类型。 打开IIS->站点属性->HTTP头->MIME类型->新建:

乔峰的专栏 6122

Silverlight常见问题解决方法

文章来源:http://jiajietieren.blog.163.com/blog/static/601869422013874828316/ 运行sliverlight的错误种类和解决办法如下, 1、silverlight 安装成功,访问站点报错代码1001、4004、8008,原因:silverlight运行的字体系统中没有(解决了N台电脑)    解决办法:添加字体,将正常运行

JZY的专栏 1万+

郑愁予-《美丽错误

我打江南走过    那等在季节里的容颜如莲花的开落    东风不来    三月的柳絮不飞    你地心如小小的寂寞的城    恰若青石的街道向晚    跫音不响    三月的春帏不揭    你地心是小小的窗扉紧掩    我达达的马蹄是美丽错误    我不是归人    是个过客

BOOT IN & JACK UP 722

丁磊:网易上市是年轻时犯下的美丽错误

“我现在追悔莫及!”昨天网易CEO丁磊向记者公开自己对于网易上市的看法,“(上市)好像是年轻时犯下的美丽错误”。丁磊想通过自己的切身经历告诫企业家们:上市不一定是件好事,要慎言上市。   上市是个美丽陷阱   企业上市的话题在广州团分组讨论时引发,有代表建议政府要加强对中小企业融资和上市的扶持,丁磊对此话题意犹未尽,在离开会场的路上,丁磊告诉记者“上市可能是个美丽的陷阱”,“风投的参与对公司可能

wodewangzhaiwo的专栏 622
上一篇: MVC框架视图及页面跳转分析-模板技术
下一篇: Web MVC框架-视图模板查找及组织
大峡
博客等级 码龄21年 703粉丝 252原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值