<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 115  文章 - 481  trackbacks - 0
    <2007年12月>
    2526272829301
    2345678
    9101112131415
    16171819202122
    23242526272829
    303112345

    常用鏈接

    留言簿(19)

    隨筆檔案(115)

    文章檔案(4)

    新聞檔案(1)

    成員連接

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

      “善意的謊言、美麗的錯誤”,這些事情在我們的生活及工作經(jīng)常都在發(fā)生。最近花了三天多的時間學(xué)習(xí)了EasyJF開源官網(wǎng)的Blog程序源碼,振奮人心之處就不說了,看過的都知道。同時也存在很多的錯誤,這些錯誤有的是由我不知何時親自導(dǎo)演,這里就撿一些“美麗”的錯誤及Bug來說說,為了自己以后不再犯這樣錯誤。

      技術(shù)構(gòu)架:EasyJWeb+Spring2+JPA 視圖模板使用:Velocity

     1、很Cool的循環(huán) 來自:Blog的圈子顯示 錯誤等級★★★★★

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

      其中$myOnwerCircle是從后臺傳過來的一個List。這個程序是遍歷一個列集合,把集合的元素循環(huán)顯示到 中,第行最多顯示兩列       。

      但無論如何,都無法得到想要的結(jié)果,由于準(zhǔn)備換成類似$BlogQuery.circleQuery.user($blog.owner).number(-1).list這樣的標(biāo)簽來查詢數(shù)據(jù),所以一直認(rèn)為是標(biāo)簽設(shè)計的問題。經(jīng)過后來的一陣折騰證明是腳本寫法的問題,你知道是哪些地方出的問題了嗎?先說明:$!CommUtil.toRowChildList這個標(biāo)簽沒任何問題。

    2、easy的echo 來自:Blog的圈子顯示 錯誤等級★★★★★☆
      頁面內(nèi)容:

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


      這里打算顯示圈子的主題以及圈子下面的blog數(shù)量。但如果不親身體會,鬼都不知道他會給你顯示什么出來。你知道嗎?

     3、非菜鳥的equals 來自:文章及照片評論
      

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

      數(shù)據(jù)結(jié)構(gòu)永遠(yuǎn)就比算法重要,這個是不容質(zhì)疑的,可以搞出很漂亮的算法,但沒有一個好的模型,你就瞎忙吧。你覺得上面的代碼哪兒錯了?

     4、一不小心就OO及ORM 來自:評論系統(tǒng)設(shè)計 ★★☆

    @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);
     }


      評論系統(tǒng),管理員能管理所有評論,能對Blog文章、像冊等進(jìn)行評論。
    這個示例要是搞好了可以當(dāng)成是一個比較經(jīng)典的OO及ORM示例,但是現(xiàn)在這樣的寫法你知道JPA會創(chuàng)建幾張表嗎,各個表之間關(guān)聯(lián)字段是是什么? Service中的getBlogReview返回什么?答對了有獎。


     4、有事無事的事務(wù) 來自blog信息發(fā)表 
      


     
    <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);
    // 很怪也滑稽的設(shè)計
       return new Page("html", r.getNewsDoc().getStaticUrl(), "html");
     }


       為什么Blog更新后出來的html頁面還是上一次更新的內(nèi)容?為什么在添加新聞的評論里面要加一句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等暴露給頁面,由頁面人員根據(jù)自己的喜愛想要展示什么數(shù)據(jù)就展示什么數(shù)據(jù)。嚴(yán)格來說,這沒什么錯,只是害苦了美工MM而已,難怪她們不喜歡呆辦公室。

     7、真空還是沒空(is NULL or EMPTY) 來自Blog發(fā)布程序

    業(yè)務(wù)層代碼:
    QueryObject query 
    = new QueryObject();
    java.util.Calendar ca 
    = java.util.Calendar.getInstance();
    ca.setTimeInMillis(ca.getTimeInMillis() 
    - blogIntervals * 1000);  
    query.addQuery(
    "(obj.updateTime",new Object[]{ca.getTime()});
    query.setPageSize(
    -1);  
    List list 
    = this.blogService.getBlogInfo(query).getResult();

    知道執(zhí)行這段代碼生成的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曾經(jīng)讓我們非常欣喜,但為什么現(xiàn)在換來的卻是大家抱怨呢?代碼有時候也是有生命的,你如何都不用心好好對待他,他怎么會一直按部就班的運(yùn)轉(zhuǎn)呢?

     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()里面會執(zhí)行類似$(“ListForm”).submit()這樣的代碼來提交表單。


    你覺得這段代碼能讓你真正的徹底刪除掉js曾經(jīng)留給你的諸多痛苦回憶嗎?你繼續(xù)痛哭吧,呵呵。其實我們只要仔細(xì)看一看就知道問題了。w3c可不是war3,不能隨便亂來的。

    10.你擁有什么? 來自Blog域?qū)ο?nbsp;
     
      

    @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;// 標(biāo)題

     @Column(length 
    = 200)
     
    protected String subtitle;// 副標(biāo)題

    }

    頁面標(biāo)簽:
    #foreach($info $BlogQuery.photoQuery.blogOwner($blog.owner).number(
    6).orderBy("inputTime").desc().list)

    #end

      呵呵,今天就這么多了,先聽聽大家的高見!下次發(fā)幾個能讓人眼前一亮的。

    posted on 2007-12-06 16:16 簡易java框架 閱讀(286) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 自拍偷自拍亚洲精品情侣| 亚洲AV无码久久| 亚洲AV本道一区二区三区四区| 亚洲av日韩av综合| 国产高清视频免费在线观看 | 免费a在线观看播放| 亚洲AV日韩精品久久久久久久| 亚洲熟女精品中文字幕| 中文字幕久无码免费久久| 成年女人男人免费视频播放| 国产性爱在线观看亚洲黄色一级片 | 青青青青青青久久久免费观看| 久久夜色精品国产亚洲av | 亚洲福利电影一区二区?| 美女裸体无遮挡免费视频网站| 91麻豆国产免费观看| 深夜国产福利99亚洲视频| 亚洲第一页中文字幕| 国产精品无码免费专区午夜| 成年性午夜免费视频网站不卡| 久久精品国产69国产精品亚洲| 亚洲成AV人影片在线观看| 日本免费大黄在线观看| 亚洲第一页日韩专区| 亚洲最大成人网色香蕉| 国产午夜精品久久久久免费视| 日本牲交大片免费观看| 亚洲欧洲春色校园另类小说| 和老外3p爽粗大免费视频| 日韩伦理片电影在线免费观看| 91情国产l精品国产亚洲区| 国产免费福利体检区久久| 免费无码不卡视频在线观看| 亚洲精品免费在线| 叮咚影视在线观看免费完整版| 国产精品jizz在线观看免费 | 亚洲最大在线观看| 东方aⅴ免费观看久久av| jlzzjlzz亚洲乱熟在线播放| 亚洲大尺度无码无码专线一区| 国产成人精品免费视|