<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)

    成員連接

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

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

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

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

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

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

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

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

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


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

     3、非菜鳥的equals 來自:文章及照片評(píng)論
      

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

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

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

    @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;// 評(píng)論的對(duì)象

    }


    public interface IBlogReviewDAO  extends GenericDAO<BlogReview> {

    }


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


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


     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è)計(jì)
       return new Page("html", r.getNewsDoc().getStaticUrl(), "html");
     }


       為什么Blog更新后出來的html頁(yè)面還是上一次更新的內(nèi)容?為什么在添加新聞的評(píng)論里面要加一句r.getNewsDoc().getReviews().remove(r),是無奈還是真的滑稽。

     5、究竟是要IP、IQ還是IC卡 來自:blog首頁(yè) ☆
     

     后臺(tái)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");
     }

    前臺(tái)頁(yè)面
    #foreach($info in $bcu.thisYear.doc.list)
    $info.title
    #end

      這段代碼是想把一些實(shí)用工具比如bb,bq,bcqu,bdqu等暴露給頁(yè)面,由頁(yè)面人員根據(jù)自己的喜愛想要展示什么數(shù)據(jù)就展示什么數(shù)據(jù)。嚴(yán)格來說,這沒什么錯(cuò),只是害苦了美工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嗎?一定會(huì)讓你大吃一驚,把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)在換來的卻是大家抱怨呢?代碼有時(shí)候也是有生命的,你如何都不用心好好對(duì)待他,他怎么會(huì)一直按部就班的運(yùn)轉(zhuǎn)呢?

     9.想擦掉js給你留下的傷疤嗎 來自blog管理后臺(tái)
     

      Html代碼
    <form name=”ListForm” id=”ListForm”/>
    <input type="button" name="submit" value="徹底刪除" onClick="F.doRemove();" class="pushbutton" style="cursor:pointer ">
    form>
         F.doRemove()里面會(huì)執(zhí)行類似$(“ListForm”).submit()這樣的代碼來提交表單。


    你覺得這段代碼能讓你真正的徹底刪除掉js曾經(jīng)留給你的諸多痛苦回憶嗎?你繼續(xù)痛哭吧,呵呵。其實(shí)我們只要仔細(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)題

    }

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

    #end

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

    posted on 2007-12-06 16:16 簡(jiǎn)易java框架 閱讀(290) 評(píng)論(0)  編輯  收藏

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 日韩av无码成人无码免费| h视频在线免费观看| 午夜免费1000部| 亚洲网红精品大秀在线观看| 日批视频网址免费观看| 亚洲日韩精品一区二区三区| 国产99精品一区二区三区免费| 亚洲午夜精品一级在线播放放 | 国产精品亚洲综合一区| 国产成人 亚洲欧洲| 免费二级毛片免费完整视频| 在线观看免费亚洲| 亚洲视频在线一区二区| 99精品免费视品| 无码乱人伦一区二区亚洲| 91成人免费观看| 色老板亚洲视频免在线观| 免费观看的毛片手机视频| 精品国产_亚洲人成在线| 亚洲性日韩精品一区二区三区| 久久久久久国产a免费观看不卡| 亚洲色WWW成人永久网址| 日韩精品无码免费一区二区三区 | 国产成人综合亚洲AV第一页| 曰韩无码AV片免费播放不卡| 国产av无码专区亚洲av果冻传媒| 久久久久女教师免费一区| 久久久久无码精品亚洲日韩| 曰批视频免费30分钟成人| 99亚洲男女激情在线观看| 久久久久亚洲爆乳少妇无| 91麻豆国产免费观看| 亚洲日韩国产二区无码| 亚洲国产精品一区二区九九| 暖暖免费日本在线中文| 亚洲一区二区三区免费观看| 免费一级特黄特色大片在线观看| 免费黄网站在线观看| 亚洲日韩国产欧美一区二区三区| 国产成人综合亚洲AV第一页| 国产成人精品免费视频大|