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

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

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

    caoyinghui

    2008年6月15日

    css+div布局

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>2列右側(cè)固定左側(cè)自適應(yīng)寬度,未知高度且底部平齊+頭部+導(dǎo)航+尾部——<a >標(biāo)準(zhǔn)之路www.aa25.cn</a></title>
    <link href="layout.css" rel="stylesheet" type="text/css" />
    <meta name="Keywords" content="標(biāo)準(zhǔn)之路,www.aa25.cn,網(wǎng)頁(yè)標(biāo)準(zhǔn)布局,DIV+CSS" />
    <meta name="" content="標(biāo)準(zhǔn)之路,www.aa25.cn,網(wǎng)頁(yè)標(biāo)準(zhǔn)布局,DIV+CSS" />
    <meta name="author" content"×××,有問(wèn)題請(qǐng)到www.68css.cn網(wǎng)站留言" />
    <meta name="Description" content="本套網(wǎng)頁(yè)標(biāo)準(zhǔn)布局模板是由標(biāo)準(zhǔn)之路(www.aa25.cn)制作完成,如果您要轉(zhuǎn)載,請(qǐng)保留版權(quán)" />
    </head>
    
    <body>
    <div id="container">
      <div id="header">This is the Header</div>
      <br class="clearfloat" />
      <div id="menu">This is the Menu</div>
      <br class="clearfloat" />
      <div id="mainContent">
        <div id="sidebar">This is the sidebar<br />
        
        </div>
        <div id="content">2列右側(cè)固定左側(cè)自適應(yīng)寬度,未知高度且底部平齊+頭部+導(dǎo)航+尾部——<a >標(biāo)準(zhǔn)之路www.aa25.cn</a><br />
          <br />
          本例和例21差不多,一個(gè)是固定寬度,一個(gè)是自適應(yīng),同樣是未知高度。<br />
          <br />
          此例中需要說(shuō)明一點(diǎn)的是:當(dāng)content設(shè)定高度后,3像素會(huì)跑到content外側(cè),反之,在content內(nèi)部。這樣,我們用!important修正在ie下向左多浮動(dòng)2像素,加上3像素的bug正好是5像素,所以在火狐和IE下顯示是一樣的,這是大家必須注意的一點(diǎn)。而當(dāng)content設(shè)定高度后,如100px,那么在IE6下,當(dāng)高度超過(guò)100px時(shí),它會(huì)自動(dòng)把conent撐高,而火狐去不會(huì)。所以用!important修正在IE下設(shè)定高度值使它的3像素跑到外側(cè),火狐下因不存在3像素問(wèn)題,所以高度自動(dòng)。<br />
          <br />
          <br />
      總之,實(shí)現(xiàn)的方法是多種多樣的,這只是本人在學(xué)習(xí)過(guò)程中總結(jié)的一點(diǎn)經(jīng)驗(yàn),權(quán)當(dāng)拋磚引玉,希望能對(duì)您有所幫助,當(dāng)然您有更好的辦法和布局,歡迎一塊來(lái)學(xué)習(xí),交流,讓web標(biāo)準(zhǔn)在中國(guó)得到更好的發(fā)展。同時(shí)希望您繼續(xù)關(guān)注標(biāo)準(zhǔn)之路(www.aa25.cn)<br />
    <br />
      如果您要實(shí)現(xiàn)未知高度底部平齊,請(qǐng)參考23例<br />
      
        </div>
      </div>
      <br class="clearfloat" />
      <div id="footer">This is the footer<span style="display:none"><script language="javascript" type="text/javascript" src="http://js.users.51.la/1967272.js"></script></span></div>
    </div>
    </body>
    </html>
    

    ?

    css

    body { font-family:Verdana; font-size:14px; margin:0;}
    
    #container {margin:0 auto; width:100%;}
    #header { height:100px; background:#9c6; margin-bottom:5px;}
    #menu { height:30px; background:#693; margin-bottom:5px;}
    #mainContent { background:url(bg.gif) right 0 repeat-y; overflow:auto;zoom:1; margin-bottom:5px;}
    #sidebar { float:right; width:200px;background:#cf9;}
    #content { margin-right:205px !important; margin-right:202px; height:auto !important; height:100px; background:#ffa;}
    #footer { height:60px; background:#9c6;}
    .clearfloat { clear:both; height:0; font-size: 1px; line-height: 0px;}
    ?

    已有 0 人發(fā)表留言,猛擊->>這里<<-參與討論


    ITeye推薦



    posted @ 2011-09-26 14:10 shine_panda 閱讀(183) | 評(píng)論 (0)編輯 收藏

    運(yùn)行命令大總結(jié)

    winver-檢查Windows版本

    ?

      wmimgmt.msc打開(kāi)windows管理體系結(jié)構(gòu)(WMI)

    ?

      wupdmgrwindows更新程序

    ?

      wscriptwindows腳本宿主設(shè)置

    ?

      write寫字板

    ?

      winmsd-系統(tǒng)信息

    ?

      wiaacmgr-掃描儀和照相機(jī)向?qū)?/p>

    ?

      winchatXP自帶局域網(wǎng)聊天

    ?

      mem.exe顯示內(nèi)存使用情況

    ?

      Msconfig.exe-系統(tǒng)配置實(shí)用程序

    ?

      mplayer2-簡(jiǎn)易widnows media player

    ?

      mspaint畫圖板

    ?

      mstsc遠(yuǎn)程桌面連接

    ?

      mplayer2-媒體播放機(jī)

    ?

      magnify放大鏡實(shí)用程序

    ?

      mmc打開(kāi)控制臺(tái)

    ?

      mobsync同步命令

    ?

      dxdiag-檢查DirectX信息

    ?

      drwtsn32 系統(tǒng)醫(yī)生

    ?

      devmgmt.msc- 設(shè)備管理器

    ?

      dfrg.msc-磁盤碎片整理程序

    ?

      diskmgmt.msc-磁盤管理實(shí)用程序

    ?

      dcomcnfg-打開(kāi)系統(tǒng)組件服務(wù)

    ?

      ddeshare-打開(kāi)DDE共享設(shè)置

    ?

      dvdplayDVD播放器

    ?

      net stop messenger-停止信使服務(wù)

    ?

      net start messenger開(kāi)始信使服務(wù)

    ?

      notepad打開(kāi)記事本

    ?

      nslookup-網(wǎng)絡(luò)管理的工具向?qū)?/p>

    ?

      ntbackup-系統(tǒng)備份和還原

    ?

      narrator-屏幕“講述人”

    ?

      ntmsmgr.msc移動(dòng)存儲(chǔ)管理器

    ?

      ntmsoprq.msc-移動(dòng)存儲(chǔ)管理員操作請(qǐng)求

    ?

      netstat -an(TC)命令檢查接口

    ?

      syncapp創(chuàng)建一個(gè)公文包

    ?

      sysedit系統(tǒng)配置編輯器

    ?

      sigverif-文件簽名驗(yàn)證程序

    ?

      sndrec32-錄音機(jī)

    ?

      shrpubw創(chuàng)建共享文件夾

    ?

      secpol.msc-本地安全策略

    ?

      syskey-系統(tǒng)加密,一旦加密就不能解開(kāi),保護(hù)windows xp系統(tǒng)的雙重密碼

    ?

      services.msc-本地服務(wù)設(shè)置

    ?

      Sndvol32-音量控制程序

    ?

      sfc.exe系統(tǒng)文件檢查器

    ?

      sfc /scannow-windows文件保護(hù)

    ?

      tsshutdn-60秒倒計(jì)時(shí)關(guān)機(jī)命令

    ?

      tourstartxp簡(jiǎn)介(安裝完成后出現(xiàn)的漫游xp程序)

    ?

      taskmgr任務(wù)管理器

    ?

      eventvwr-事件查看器

    ?

      eudcedit-造字程序

    ?

      explorer-打開(kāi)資源管理器

    ?

      packager-對(duì)象包裝程序

    ?

      perfmon.msc計(jì)算機(jī)性能監(jiān)測(cè)程序

    ?

      progman程序管理器

    ?

      regedit.exe注冊(cè)表

    ?

      rsop.msc-組策略結(jié)果集

    ?

      regedt32-注冊(cè)表編輯器

    ?

      rononce -p 15秒關(guān)機(jī)

    ?

      regsvr32 /u *.dll停止dll文件運(yùn)行

    ?

      regsvr32 /u zipfldr.dll取消ZIP支持

    ?

      cmd.exeCMD命令提示符

    ?

      chkdsk.exe-Chkdsk磁盤檢查

    ?

      certmgr.msc證書管理實(shí)用程序

    ?

      calc-啟動(dòng)計(jì)算器

    ?

      charmap啟動(dòng)字符映射表

    ?

      cliconfg-SQL SERVER 客戶端網(wǎng)絡(luò)實(shí)用程序

    ?

      Clipbrd剪貼板查看器

    ?

      conf-啟動(dòng)netmeeting

    ?

      compmgmt.msc-計(jì)算機(jī)管理

    ?

      cleanmgr-垃圾整理

    ?

      ciadv.msc索引服務(wù)程序

    ?

      osk打開(kāi)屏幕鍵盤

    ?

      odbcad32-ODBC數(shù)據(jù)源管理器

    ?

      oobe/msoobe /a檢查XP是否激活

    ?

      lusrmgr.msc本機(jī)用戶和組

    ?

      logoff-注銷命令

    ?

      iexpress-木馬捆綁工具,系統(tǒng)自帶

    ?

      Nslookup-IP地址偵測(cè)器

    ?

      fsmgmt.msc-共享文件夾管理器

    ?

      utilman輔助工具管理器

    ?

      gpedit.msc-組策略

    ?



    已有 0 人發(fā)表留言,猛擊->>這里<<-參與討論


    ITeye推薦



    posted @ 2011-09-23 09:56 shine_panda 閱讀(173) | 評(píng)論 (0)編輯 收藏

    java版俄羅斯方塊

    package com.shine;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    import javax.swing.*;
    import javax.swing.Timer;
    
    public class Tetris extends JFrame {
        public Tetris() {
            Tetrisblok a = new Tetrisblok();
            addKeyListener(a);
            add(a);
        }
    
        public static void main(String[] args) {
            Tetris frame = new Tetris();
            JMenuBar menu = new JMenuBar();
            frame.setJMenuBar(menu);
            JMenu game = new JMenu("游戲");
            JMenuItem newgame = game.add("新游戲");
            JMenuItem pause = game.add("暫停");
            JMenuItem goon = game.add("繼續(xù)");
            JMenuItem exit = game.add("退出");
            JMenu help = new JMenu("幫助");
            JMenuItem about = help.add("關(guān)于");
            menu.add(game);
            menu.add(help);
            frame.setLocationRelativeTo(null);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(220, 275);
            frame.setTitle("Tetris內(nèi)測(cè)版");
            // frame.setUndecorated(true);
            frame.setVisible(true);
            frame.setResizable(false);
    
        }
    }
    
    // 創(chuàng)建一個(gè)俄羅斯方塊類
    class Tetrisblok extends JPanel implements KeyListener {
    
        // blockType 代表方塊類型
        // turnState代表方塊狀態(tài)
        private int blockType;
        private int score = 0;
    
        private int turnState;
    
        private int x;
    
        private int y;
    
        private int i = 0;
    
        int j = 0;
        int flag = 0;
        // 定義已經(jīng)放下的方塊x=0-11,y=0-21;
        int[][] map = new int[13][23];
    
        // 方塊的形狀 第一組代表方塊類型有S、Z、L、J、I、O、T 7種 第二組 代表旋轉(zhuǎn)幾次 第三四組為 方塊矩陣
        private final int shapes[][][] = new int[][][] {
        // i
                { { 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
                        { 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 },
                        { 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
                        { 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 } },
                // s
                { { 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                        { 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
                        { 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                        { 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 } },
                // z
                { { 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                        { 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 },
                        { 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                        { 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 } },
                // j
                { { 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 },
                        { 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                        { 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 },
                        { 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
                // o
                { { 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                        { 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                        { 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                        { 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
                // l
                { { 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 },
                        { 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                        { 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
                        { 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
                // t
                { { 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                        { 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
                        { 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                        { 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 } } };
    
        // 生成新方塊的方法
        public void newblock() {
            blockType = (int) (Math.random() * 1000) % 7;
            turnState = (int) (Math.random() * 1000) % 4;
            x = 4;
            y = 0;
            if (gameover(x, y) == 1) {
    
                newmap();
                drawwall();
                score = 0;
                JOptionPane.showMessageDialog(null, "GAME OVER");
            }
        }
    
        // 畫圍墻
        public void drawwall() {
            for (i = 0; i < 12; i++) {
                map[i][21] = 2;
            }
            for (j = 0; j < 22; j++) {
                map[11][j] = 2;
                map[0][j] = 2;
            }
        }
    
        // 初始化地圖
        public void newmap() {
            for (i = 0; i < 12; i++) {
                for (j = 0; j < 22; j++) {
                    map[i][j] = 0;
                }
            }
        }
    
        // 初始化構(gòu)造方法
        Tetrisblok() {
            newblock();
            newmap();
            drawwall();
            Timer timer = new Timer(1000, new TimerListener());
            timer.start();
        }
    
        // 旋轉(zhuǎn)的方法
        public void turn() {
            int tempturnState = turnState;
            turnState = (turnState + 1) % 4;
            if (blow(x, y, blockType, turnState) == 1) {
            }
            if (blow(x, y, blockType, turnState) == 0) {
                turnState = tempturnState;
            }
            repaint();
        }
    
        // 左移的方法
        public void left() {
            if (blow(x - 1, y, blockType, turnState) == 1) {
                x = x - 1;
            }
            ;
            repaint();
        }
    
        // 右移的方法
        public void right() {
            if (blow(x + 1, y, blockType, turnState) == 1) {
                x = x + 1;
            }
            ;
            repaint();
        }
    
        // 下落的方法
        public void down() {
            if (blow(x, y + 1, blockType, turnState) == 1) {
                y = y + 1;
                delline();
            }
            ;
            if (blow(x, y + 1, blockType, turnState) == 0) {
                add(x, y, blockType, turnState);
                newblock();
                delline();
            }
            ;
            repaint();
        }
    
        // 是否合法的方法
        public int blow(int x, int y, int blockType, int turnState) {
            for (int a = 0; a < 4; a++) {
                for (int b = 0; b < 4; b++) {
                    if (((shapes[blockType][turnState][a * 4 + b] == 1) && (map[x
                            + b + 1][y + a] == 1))
                            || ((shapes[blockType][turnState][a * 4 + b] == 1) && (map[x
                                    + b + 1][y + a] == 2))) {
    
                        return 0;
                    }
                }
            }
            return 1;
        }
    
        // 消行的方法
        public void delline() {
            int c = 0;
            for (int b = 0; b < 22; b++) {
                for (int a = 0; a < 12; a++) {
                    if (map[a][b] == 1) {
    
                        c = c + 1;
                        if (c == 10) {
                            score += 10;
                            for (int d = b; d > 0; d--) {
                                for (int e = 0; e < 11; e++) {
                                    map[e][d] = map[e][d - 1];
    
                                }
                            }
                        }
                    }
                }
                c = 0;
            }
        }
    
        // 判斷你掛的方法
        public int gameover(int x, int y) {
            if (blow(x, y, blockType, turnState) == 0) {
                return 1;
            }
            return 0;
        }
    
        // 把當(dāng)前添加map
        public void add(int x, int y, int blockType, int turnState) {
            int j = 0;
            for (int a = 0; a < 4; a++) {
                for (int b = 0; b < 4; b++) {
                    if (map[x + b + 1][y + a] == 0) {
                        map[x + b + 1][y + a] = shapes[blockType][turnState][j];
                    }
                    ;
                    j++;
                }
            }
        }
    
        // 畫方塊的的方法
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            // 畫當(dāng)前方塊
            for (j = 0; j < 16; j++) {
                if (shapes[blockType][turnState][j] == 1) {
                    g.fillRect((j % 4 + x + 1) * 10, (j / 4 + y) * 10, 10, 10);
                }
            }
            // 畫已經(jīng)固定的方塊
            for (j = 0; j < 22; j++) {
                for (i = 0; i < 12; i++) {
                    if (map[i][j] == 1) {
                        g.fillRect(i * 10, j * 10, 10, 10);
    
                    }
                    if (map[i][j] == 2) {
                        g.drawRect(i * 10, j * 10, 10, 10);
    
                    }
                }
            }
            g.drawString("score=" + score, 125, 10);
            g.drawString("抵制不良游戲,", 125, 50);
            g.drawString("拒絕盜版游戲。", 125, 70);
            g.drawString("注意自我保護(hù),", 125, 90);
            g.drawString("謹(jǐn)防受騙上當(dāng)。", 125, 110);
            g.drawString("適度游戲益腦,", 125, 130);
            g.drawString("沉迷游戲傷身。", 125, 150);
            g.drawString("合理安排時(shí)間,", 125, 170);
            g.drawString("享受健康生活。", 125, 190);
        }
    
        // 鍵盤監(jiān)聽(tīng)
        public void keyPressed(KeyEvent e) {
            switch (e.getKeyCode()) {
            case KeyEvent.VK_DOWN:
                down();
                break;
            case KeyEvent.VK_UP:
                turn();
                break;
            case KeyEvent.VK_RIGHT:
                right();
                break;
            case KeyEvent.VK_LEFT:
                left();
                break;
            }
    
        }
    
        // 無(wú)用
        public void keyReleased(KeyEvent e) {
        }
    
        // 無(wú)用
        public void keyTyped(KeyEvent e) {
        }
    
        // 定時(shí)器監(jiān)聽(tīng)
        class TimerListener implements ActionListener {
            public void actionPerformed(ActionEvent e) {
    
                repaint();
                if (blow(x, y + 1, blockType, turnState) == 1) {
                    y = y + 1;
                    delline();
                }
                ;
                if (blow(x, y + 1, blockType, turnState) == 0) {
    
                    if (flag == 1) {
                        add(x, y, blockType, turnState);
                        delline();
                        newblock();
                        flag = 0;
                    }
                    flag = 1;
                }
                ;
            }
        }
    }
    ?轉(zhuǎn)自CSDN

    已有 0 人發(fā)表留言,猛擊->>這里<<-參與討論


    ITeye推薦



    posted @ 2011-09-08 17:30 shine_panda 閱讀(173) | 評(píng)論 (0)編輯 收藏

    UBB轉(zhuǎn)HTML和HTML轉(zhuǎn)UBB

    function htmlToubb(h,u){
    	str = pattern(document.getElementById(h).value);
    	document.getElementById(u).value=str;
    }
    
    function ubbTohtml(u,h){
    	str = up(document.getElementById(u).value);
    	document.getElementById(h).value=str;
    }
    
    function pattern(str){
    	str = str.replace(/<br[^>]*>/ig,'\n');
    	str = str.replace(/<p[^>\/]*\/>/ig,'\n');
    	str = str.replace(/\son[\w]{3,16}\s?=\s*([\'\"]).+?\1/ig,'');
    	str = str.replace(/<hr[^>]*>/ig,'[hr]');
    	str = str.replace(/<(sub|sup|u|strike|b|i|pre)>/ig,'[$1]');
    	str = str.replace(/<\/(sub|sup|u|strike|b|i|pre)>/ig,'[/$1]');
    	str = str.replace(/<(\/)?strong>/ig,'[$1b]');
    	str = str.replace(/<(\/)?em>/ig,'[$1i]');
    	str = str.replace(/<(\/)?blockquote([^>]*)>/ig,'[$1blockquote]');
    	str = str.replace(/<img[^>]*smile=\"(\d+)\"[^>]*>/ig,'[s:$1]');
    	str = str.replace(/<img[^>]*src=[\'\"\s]*([^\s\'\"]+)[^>]*>/ig,'[img]'+'$1'+'[/img]');
    	str = str.replace(/<a[^>]*href=[\'\"\s]*([^\s\'\"]*)[^>]*>(.+?)<\/a>/ig,'[url=$1]'+'$2'+'[/url]');
    	str = str.replace(/<[^>]*?>/ig, '');
    	str = str.replace(/&amp;/ig, '&');
    	str = str.replace(/&lt;/ig, '<');
    	str = str.replace(/&gt;/ig, '>');
    	return str;
    }
    
    function up(str){
    	str = str.replace(/</ig,'&lt;');
    	str = str.replace(/>/ig,'&gt;');
    	str = str.replace(/\n/ig,'<br />');
    	str = str.replace(/\[code\](.+?)\[\/code\]/ig, function($1, $2) {return phpcode($2);});
    	str = str.replace(/\[hr\]/ig,'<hr />');
    	str = str.replace(/\[\/(size|color|font|backcolor)\]/ig,'</font>');
    	str = str.replace(/\[(sub|sup|u|i|strike|b|blockquote|li)\]/ig,'<$1>');
    	str = str.replace(/\[\/(sub|sup|u|i|strike|b|blockquote|li)\]/ig,'</$1>');
    	str = str.replace(/\[\/align\]/ig,'</p>');
    	str = str.replace(/\[(\/)?h([1-6])\]/ig,'<$1h$2>');
    	str = str.replace(/\[align=(left|center|right|justify)\]/ig,'<p align="$1">');
    	str = str.replace(/\[size=(\d+?)\]/ig,'<font size="$1">');
    	str = str.replace(/\[color=([^\[\<]+?)\]/ig, '<font color="$1">');
    	str = str.replace(/\[backcolor=([^\[\<]+?)\]/ig, '<font style="background-color:$1">');
    	str = str.replace(/\[font=([^\[\<]+?)\]/ig, '<font face="$1">');
    	str = str.replace(/\[list=(a|A|1)\](.+?)\[\/list\]/ig,'<ol type="$1">$2</ol>');
    	str = str.replace(/\[(\/)?list\]/ig,'<$1ul>');
    	str = str.replace(/\[s:(\d+)\]/ig,function($1,$2){ return smilepath($2);});
    	str = str.replace(/\[img\]([^\[]*)\[\/img\]/ig,'<img src="$1" border="0" />');
    	str = str.replace(/\[url=([^\]]+)\]([^\[]+)\[\/url\]/ig, '<a href="$1">'+'$2'+'</a>');
    	str = str.replace(/\[url\]([^\[]+)\[\/url\]/ig, '<a href="$1">'+'$1'+'</a>');
    	return str;
    }
    
    ?

    已有 0 人發(fā)表留言,猛擊->>這里<<-參與討論


    ITeye推薦



    posted @ 2011-08-31 14:09 shine_panda 閱讀(690) | 評(píng)論 (0)編輯 收藏

    Win7下無(wú)法顯示Courier New字體

    PL/SQL 或UE中進(jìn)行設(shè)置時(shí)發(fā)現(xiàn),找不到Courier New

    字體。重裝也沒(méi)作用。

    根本原因是沒(méi)有將?Courier New 設(shè)置為“顯示”




    已有 0 人發(fā)表留言,猛擊->>這里<<-參與討論


    ITeye推薦



    posted @ 2011-08-05 19:30 shine_panda 閱讀(290) | 評(píng)論 (0)編輯 收藏

    UE在Win7下添加右鍵菜單

    Windows Registry Editor Version 5.00

    ?

    [HKEY_CLASSES_ROOT\*\shell]

    [HKEY_CLASSES_ROOT\*\shell\UltraEdit]

    @="UltraEdit-32"

    [HKEY_CLASSES_ROOT\*\shell\UltraEdit\Command]

    @="C:\\Program Files (x86)\\IDM Computer Solutions\\UltraEdit\\Uedit32.exe %1"



    C:\\Program Files (x86)\\IDM Computer Solutions\\UltraEdit\\Uedit32.exe這個(gè)改為實(shí)際路徑



    已有 0 人發(fā)表留言,猛擊->>這里<<-參與討論


    ITeye推薦



    posted @ 2011-07-30 10:39 shine_panda 閱讀(3972) | 評(píng)論 (0)編輯 收藏

    自定義word樣式

    word中代碼風(fēng)格模板樣式定義



    ?

    ?

    ?

    ?

    ?

    ?

    已有 0 人發(fā)表留言,猛擊->>這里<<-參與討論


    ITeye推薦



    posted @ 2011-07-15 14:09 shine_panda 閱讀(115) | 評(píng)論 (0)編輯 收藏

    Jrebel和tomcat插件集成

    Jrebel實(shí)現(xiàn)熱加載,tomcat插件實(shí)現(xiàn)快速發(fā)布啟動(dòng)



    安裝參考:http://blog.csdn.net/zhaofsh/article/details/6291660

    詳細(xì)部署參考:http://developer.51cto.com/art/201103/250797.htm

    ?

    ?



    已有 0 人發(fā)表留言,猛擊->>這里<<-參與討論


    ITeye推薦



    posted @ 2011-07-15 09:26 shine_panda 閱讀(171) | 評(píng)論 (0)編輯 收藏

    去掉word2007里的這個(gè)小箭頭

    每次一按回車,序號(hào)后面跟著一個(gè)箭頭,雖然打印的時(shí)候不會(huì)顯示出來(lái),但這種排版效果不好。
    好像是樣式的問(wèn)題,不知道怎么處理?
    怎么樣去掉word里的這個(gè)小箭頭?

    解決辦法如圖:




    已有 0 人發(fā)表留言,猛擊->>這里<<-參與討論


    ITeye推薦



    posted @ 2011-07-14 17:59 shine_panda 閱讀(110) | 評(píng)論 (0)編輯 收藏

    Eclipse熱加載失敗提示設(shè)置

    錯(cuò)誤提示:

    設(shè)置方式:


    ?

    ?



    已有 0 人發(fā)表留言,猛擊->>這里<<-參與討論


    ITeye推薦



    posted @ 2011-07-13 09:41 shine_panda 閱讀(158) | 評(píng)論 (0)編輯 收藏

    Eclipse使用技巧

    1,當(dāng)選擇了一段文本后 (如一個(gè)變量名)在整個(gè)類中用到該文本的地方都高亮顯示

       Eclipse工具欄上有個(gè)類似鋼筆的圖標(biāo),按下去就可以了。

     

    2,當(dāng)想要修改一個(gè)變量在類中所有用到的地方時(shí) 如 A a = new A(); 還有很多其它位置用到a 現(xiàn)在想要把a(bǔ) 改為a1

       可以選正a后在菜單上選Refactor->Rename 就可以。類中有a 的地方都會(huì)改為a1 

    作者:caoyinghui1986 發(fā)表于2009-9-4 21:41:00 原文鏈接
    閱讀:123 評(píng)論:1 查看評(píng)論

    posted @ 2009-09-04 13:41 shine_panda 閱讀(82) | 評(píng)論 (0)編輯 收藏

    Eclipse中CVS界面功能描述 --特殊情況及其處理(二)

    //原文地址:http://hi.baidu.com/xublog/blog/item/06a9261120fd9b78cb80c435.html

     

    5.6 其他功能

    在這一節(jié)中,我們將介紹幾個(gè)非常有用的Eclipse功能。這些功能有助于您提高CVS和Eclipse的使用效率。

    5.6.1 編輯器中的快速差別功能對(duì)CVS的支持

    在本書第2章“Eclipse入門”中,您知道編輯 器所支持的快速差別功能可對(duì)文件的添加和修改操作加上注釋。如果您在Workbench | Editor | Quick Diff首選項(xiàng)頁(yè)面中啟用了Latest CVS Revision選項(xiàng),那么快速差別功能所添加的文件注釋是在參考CVS中該文件最新版本的基礎(chǔ)之上添加的。在將更改提交到CVS或用CVS中該文件的某 一版本來(lái)替換該文件時(shí),快速差別功能所添加的注釋會(huì)被刪除。

    5.6.2 補(bǔ)丁程序:快速而又簡(jiǎn)單地共享更改

    補(bǔ)丁程序(patch)是一個(gè)包含了某一資源的資源庫(kù)實(shí)例和該資源的工作空間實(shí)例之間差別的文件。補(bǔ)丁程序可表示出一個(gè)單獨(dú)文件(或完整項(xiàng)目)中的差別。補(bǔ)丁程序允許您共享尚未提交到CVS的更改。有很多原因使得補(bǔ)丁程序非常有用。

    ●       由于您沒(méi)有向CVS提交資源的權(quán)限,所以您需要將該補(bǔ)丁程序發(fā)送給具有資源提交權(quán)限的人,然后再由他向CVS提交資源。

    ●       您需要為所遇到的問(wèn)題準(zhǔn)備一個(gè)應(yīng)急修改或臨時(shí)工作空間。

    ●       在將重要的更改提交到CVS之前,您可能想讓別人對(duì)您的更改進(jìn)行校驗(yàn)。在這種情況下,您可以將補(bǔ)丁程序發(fā)送給校驗(yàn)人以讓他們進(jìn)行測(cè)試。

    通過(guò)使用快捷菜單Team | Create Patch…,我們就可以創(chuàng)建補(bǔ)丁文件。該操作會(huì)調(diào)用Create Patch向?qū)?lái)指導(dǎo)您完成補(bǔ)丁文件的創(chuàng)建。若要應(yīng)用某補(bǔ)丁程序,則使用快捷菜單Team | Apply Patch…。該操作會(huì)調(diào)用Apply Patch向?qū)Аclipse聯(lián)機(jī)文檔Workbench User Guide的Working with patches 一節(jié)中有關(guān)上述兩個(gè)操作的描述非常精彩。

    5.6.3 項(xiàng)目集:加快新工作空間

    小組支持為工作空間中的項(xiàng)目(一個(gè)或多個(gè))提供了版 本控制信息的封裝功能。該封裝功能被稱為項(xiàng)目集。項(xiàng)目集的目的是從執(zhí)行任務(wù)所需的資源庫(kù)中把需要的全部項(xiàng)目都預(yù)先準(zhǔn)備到一個(gè)工作空間中。在應(yīng)用程序構(gòu)建過(guò) 程中可能要用到存在相互依賴關(guān)系的多個(gè)項(xiàng)目。下述操作可能是單調(diào)乏味而又容易產(chǎn)生錯(cuò)誤的:決定所需項(xiàng)目,然后再將這些所需的正確項(xiàng)目從資源庫(kù)中手動(dòng)添加到 工作空間中。項(xiàng)目集是Eclipse的一個(gè)功能單元。資源庫(kù)提供程序可對(duì)是否支持該功能進(jìn)行選擇(很多資源庫(kù)提供程序都會(huì)選擇是)。CVS對(duì)項(xiàng)目集提供了 支持。一個(gè)項(xiàng)目集所封裝的項(xiàng)目可能是由不同資源庫(kù)管理的。

    項(xiàng)目集信息包含在一個(gè)文件中。若要?jiǎng)?chuàng)建該項(xiàng)目集信息 文件,則在菜單欄上選擇File | Export | Team Project Set選項(xiàng)。若要使用該項(xiàng)目集信息文件,則在菜單欄上選擇File | Import | Team Project Set選項(xiàng)。通過(guò)使用Export向?qū)В覀兛梢詫?duì)項(xiàng)目集中所包含的項(xiàng)目進(jìn)行定義。出于通用的考慮,最終的項(xiàng)目集信息文件可被發(fā)送給別人以在CVS中進(jìn)行 導(dǎo)入或維護(hù)。對(duì)于所開(kāi)發(fā)的應(yīng)用程序來(lái)說(shuō),您可以為其開(kāi)發(fā)生命周期關(guān)鍵節(jié)點(diǎn)處的快照維護(hù)多個(gè)項(xiàng)目集文件。

    在導(dǎo)入過(guò)程中,項(xiàng)目集文件中定義的所有項(xiàng)目都被從 CVS中自動(dòng)檢出到您的工作空間中。在導(dǎo)入過(guò)程中,一種可能比較穩(wěn)健的做法是禁用自動(dòng)構(gòu)建首選項(xiàng)設(shè)置(Workbench首選項(xiàng)頁(yè)面中的Build Automatically設(shè)置)。通過(guò)禁用Build Automatically設(shè)置,我們就可以在導(dǎo)入過(guò)程中避免編譯和構(gòu)建操作,進(jìn)而加快資源的導(dǎo)入。但在導(dǎo)入操作完成后,請(qǐng)記住要重新啟用該首選項(xiàng)。

    5.6.4 斷開(kāi)項(xiàng)目與CVS的連接或?yàn)轫?xiàng)目重分派一個(gè)CVS資源庫(kù)

    通過(guò)使用Team | Disconnect…操作,您可以斷開(kāi)項(xiàng)目與CVS的連接。在選擇了快捷菜單Team | Disconnect…后會(huì)出現(xiàn)一個(gè)對(duì)話框。該對(duì)話框會(huì)對(duì)您進(jìn)行詢問(wèn),以讓您對(duì)是否保存該項(xiàng)目的CVS元數(shù)據(jù)作出決定。如果選擇了保留該項(xiàng)目的CVS元數(shù) 據(jù),那么通過(guò)使用Team | Share Project…操作,我們就可以將該項(xiàng)目與同一CVS資源庫(kù)進(jìn)行重新連接。如果您刪除了該CVS元數(shù)據(jù),那么可以將該項(xiàng)目共享給其他資源庫(kù)。

    作為選擇,如想將項(xiàng)目重新分派給另外一個(gè)CVS資源庫(kù),那么您可以先為該項(xiàng)目打開(kāi)CVS資源庫(kù)頁(yè)面,然后再選擇Change Sharing…按鈕。該操作與使用Disconnect…以及Share Project…操作在邏輯上等價(jià)。

    作者:caoyinghui1986 發(fā)表于2009-8-28 21:58:00 原文鏈接
    閱讀:498 評(píng)論:0 查看評(píng)論

    posted @ 2009-08-28 13:58 shine_panda 閱讀(116) | 評(píng)論 (0)編輯 收藏

    Eclipse中CVS界面功能描述 --特殊情況及其處理(一)

    //原文地址:http://hi.baidu.com/xublog/blog/item/8265f309c5d35bc93ac76334.html

    5.5 特殊情況及其處理

    這里將給出一些您每天或在軟件開(kāi)發(fā)周期中可能會(huì)碰到的常見(jiàn)情況,以及如何使用Eclipse來(lái)處理這些情況的建議。某些情況的解決可能需要使用CVS,但通常只使用Eclipse就可以處理它們。

    5.5.1 對(duì)項(xiàng)目資源進(jìn)行重命名、移動(dòng)和刪除

    ●       避免重命名CVS控制之下的項(xiàng)目。如果您這樣做了,那么所做的命名修改只在該項(xiàng)目所處的工作空間中有效。保留在CVS中的仍是該項(xiàng)目的初始名。如果必須修 改項(xiàng)目的名稱,那么您最好先使用Team | Disconnect…操作來(lái)解除該項(xiàng)目與CVS的關(guān)聯(lián)關(guān)系,然后再對(duì)該項(xiàng)目重命名。事實(shí)上,重命名后的項(xiàng)目會(huì)被看作是新項(xiàng)目。在將重命名后的項(xiàng)目重新連 接到CVS時(shí),您必須像定義任何新項(xiàng)目一樣將該重命名后的項(xiàng)目定義到CVS中。

    ●       對(duì)文件夾的重命名操作會(huì)導(dǎo)致CVS中出現(xiàn)一個(gè)新文件夾。幸運(yùn)的是,原文件夾中的內(nèi)容會(huì)被移動(dòng)到新文件夾中。如果您啟用了CVS首選項(xiàng)Prune empty directories,那么在從CVS檢出資源后,該舊文件夾將不會(huì)出現(xiàn)在您的工作空間中。

    ●       如果您將工作空間中的某資源刪除了,那么在向CVS提交了更改后,保存在CVS中的該資源也會(huì)被刪除。要記住的是文件夾決不會(huì)在CVS中刪除。CVS首選 項(xiàng)Prune empty directories使得這些文件夾隱藏在視圖中。默認(rèn)情況下,CVS首選項(xiàng)Prune empty directories是被啟用的。

    ●       因?yàn)樾薷目赡軙?huì)涉及多個(gè)項(xiàng)目,所以在進(jìn)行全局修改前,您需要確保工作空間中的所有項(xiàng)目是資源庫(kù)中的最新版本。Java類的重構(gòu)是一個(gè)可能導(dǎo)致工作空間被廣泛修改的操作。項(xiàng)目間的資源移動(dòng)也可能產(chǎn)生這種影響。

    ●       在CVS透視圖中,項(xiàng)目之間資源移動(dòng)的結(jié)果是:所要移動(dòng)的資源添加到目標(biāo)項(xiàng)目中,而源項(xiàng)目中的該資源會(huì)被刪除。移動(dòng)到目標(biāo)項(xiàng)目中的資源必須被添加到版本控制中。而資源重命名的效果與此相同。

    ●       在文件被修改后,如果您要執(zhí)行諸如同步等CVS操作,那么我們建議您在項(xiàng)目層次上進(jìn)行同步(即使您的更改可能僅涉及一個(gè)單獨(dú)文件)。例如,如果您對(duì)一個(gè)文 件進(jìn)行了重命名這一CVS的刪除和添加操作,那么在文件層次上的同步將只會(huì)檢測(cè)添加操作而不檢測(cè)刪除操作。而項(xiàng)目層次上的同步則會(huì)對(duì)添加和刪除操作都進(jìn)行 檢測(cè)。

    ●       在所進(jìn)行的修改涉及整個(gè)應(yīng)用程序的情況下,您應(yīng)該將這次修改通知給自己所在的小組,以避免不必要的沖突。此時(shí),一旦條件滿足,您就應(yīng)該提交修改。沖突的解決可能是冗長(zhǎng)乏味而又難以解決的。

    5.5.2 取消修改:使用替換和比較操作

    有時(shí),我們都希望事情能夠重新開(kāi)始。在人的一生中, 這可能不容易。但是對(duì)于Eclipse和CVS來(lái)說(shuō),這要簡(jiǎn)單得多。根據(jù)您的需要,您有多種選擇。在先前的幾章中,您看到了如何使用快捷菜單操作 Replace With和Compare With用工作空間中的本地歷史記錄來(lái)替換和比較資源。通過(guò)使用CVS,您對(duì)資源的替換和比較操作就有了額外的選擇。如果您尚未最終完成某個(gè)修改,而且之 后一段時(shí)間里根本就沒(méi)有繼續(xù)這次修改。這種情況下,Compare With操作可能會(huì)非常有用,它會(huì)使您記起上次停止修改的地方。在使用上述Replace With和Compare With操作時(shí),您是用來(lái)自HEAD流(或者其他分支/版本、某一個(gè)具體版本)的最新資源來(lái)替換或比較當(dāng)前資源的。

    5.5.3 通過(guò)建立分支來(lái)進(jìn)行版本維護(hù)和新版本開(kāi)發(fā)

    在小組已經(jīng)交付了您的應(yīng)用程序并準(zhǔn)備開(kāi)始下一個(gè)版本的開(kāi)發(fā)工作時(shí),您可能喜歡所有的后續(xù)開(kāi)發(fā)能在下一版本所指派的特定分支處開(kāi)始,同時(shí)還要允許先前版本的服務(wù)。這里所給出的就是在Eclipse中可用的一種方法。

    ●       在包含了最近已完成版本的分支(或HEAD)中,請(qǐng)選擇所有的項(xiàng)目。然后在所選項(xiàng)目上使用Branch…快捷菜單,并輸入該新版本的新分支名。這樣,所選 擇的全部項(xiàng)目以及這些項(xiàng)目的內(nèi)容將用下一個(gè)版本分支名來(lái)標(biāo)記。在CVS Repositories視圖中,這些項(xiàng)目會(huì)被列在那個(gè)分支名之下。在從那個(gè)分支處將這些項(xiàng)目檢出到您的工作空間之后,接下來(lái)的操作是基于該新版本分支 的。

    ●       您可重復(fù)上述過(guò)程以創(chuàng)建一個(gè)單獨(dú)的維護(hù)分支。該維護(hù)分支獨(dú)立于上面所創(chuàng)建的新版本分支。

    ●       為了能以維護(hù)分支為基礎(chǔ),在工作空間中對(duì)新版本分支進(jìn)行合適的前向修改,您可以通過(guò)使用Compare With | Another Branch or Version…操作來(lái)確定這兩個(gè)分支之間的差別。在Compare視圖中,您可以手動(dòng)合并從維護(hù)分支到新版本分支的更改。

    作者:caoyinghui1986 發(fā)表于2009-8-28 21:56:00 原文鏈接
    閱讀:266 評(píng)論:0 查看評(píng)論

    posted @ 2009-08-28 13:56 shine_panda 閱讀(69) | 評(píng)論 (0)編輯 收藏

    Eclipse中CVS界面功能描述 (三)

    //原文地址:http://hi.baidu.com/xublog/blog/item/8eab160264428f094afb512b.html

    5.4.9 處理同一文件的并發(fā)更新

    首先,我們討論一下一個(gè)被建議用來(lái)進(jìn)行修改操作的協(xié) 議。當(dāng)在工作空間中使用資源時(shí),您的操作是獨(dú)立于CVS資源庫(kù)的。因?yàn)榘l(fā)生在資源庫(kù)中的更改可能是在您不知道的情況下發(fā)生的,所以非常重要的一點(diǎn)是,如果 還未檢查資源庫(kù)中是否有更新取代了您的更改,那么您一定不要提交任何更改。Team | Update…操作會(huì)用資源庫(kù)中那些取代了您的更改的任何更改來(lái)更新項(xiàng)目的本地副本。對(duì)于文本文件(包括Java類)來(lái)說(shuō),Team | Update…操作會(huì)自動(dòng)對(duì)任何更改進(jìn)行合并(從資源庫(kù)到工作空間),即使這些更改可能造成沖突。在遇到?jīng)_突時(shí),合并操作會(huì)用特定的CVS標(biāo)記文本來(lái)標(biāo)識(shí) 文件中的沖突,以幫助您識(shí)別出沖突行。標(biāo)記文本并不是與任何類型的文件都兼容,例如它可能導(dǎo)致編譯錯(cuò)誤。

    Update… 操作是一個(gè)非常強(qiáng)大的操作,我們?cè)诰毩?xí)時(shí)一定要小心。在下面這個(gè)例子中,Pat和Lynn更新了一個(gè)簡(jiǎn)單的文本文件。無(wú)需知道它,它們都對(duì)以“B”和 “C”開(kāi)始的行進(jìn)行了更新。標(biāo)記文本會(huì)對(duì)沖突的那些行以及引入了沖突的版本號(hào)(1.2)進(jìn)行了標(biāo)識(shí)。對(duì)于一個(gè)帶有眾多沖突的復(fù)雜Java文件來(lái)說(shuō),您可能 很難解決其中的沖突。

    A is for apple

    <<<<<<< sample.txt

    B is for bird             (updated by pat )

    C is for crow             (updated by pat )

    =======

    B is for bobcat           (updated by lynn )

    C is for cow             (updated by lynn )

    >>>>>>> 1.2

    D is for dog

    E is for excellent

    F is for farm

    G is for goat...

    Team | Synchronize with Repository…操作也支持更新,但是該操作不會(huì)自動(dòng)進(jìn)行更新。在執(zhí)行該操作后會(huì)顯示Synchronize視圖,并會(huì)列出工作空間副本和資源庫(kù)最 新資源之間那些不一致的資源。在Synchronize視圖中,您可以對(duì)這些差別進(jìn)行檢查,并決定所要采取的操作。由于Team | Synchronize with Repository…操作可使您擁有更多的控制權(quán),所以我們建議您使用該操作來(lái)代替Update…操作。

    下面總結(jié)一下文件并發(fā)更新的基本規(guī)則:在對(duì)工作空間 中的文件進(jìn)行修改之前,您必須用資源庫(kù)中的所有更改來(lái)更新工作空間中的資源。為了安全起見(jiàn),此時(shí)請(qǐng)使用Team | Synchronize with Repository…操作。在Synchronize視圖中,您可執(zhí)行更新操作,還可提交更改,并可協(xié)調(diào)沖突。

    5.4.10 使用CVS的Watch/Edit支持以避免對(duì)同一文件的并行更新

    CVS 的Watch/Edit支持是Eclipse本身就提供的。如果您同意使用CVS的Watch/Edit支持,那么在提交資源時(shí),您和小組其他成員之間就 可以避免沖突。在啟用了CVS的Watch/Edit支持之后,您的項(xiàng)目小組可以更好地理解在所有具體項(xiàng)目中,當(dāng)前誰(shuí)正更新文件。相反,前面所討論的 CVS Annotate視圖為您所顯示的是先前的更改以及誰(shuí)做的更改。CVS的Watch/Edit支持是在項(xiàng)目層次上被啟用的。如果在Team | CVS >Watch/Edit的首選項(xiàng)設(shè)置頁(yè)面中選中了Configure projects to use Watch/Edit on checkout復(fù)選框,那么在項(xiàng)目被檢出時(shí),Watch/Edit支持將被自動(dòng)激活。您也可以通過(guò)設(shè)置項(xiàng)目的CVS屬性在受CVS管理的現(xiàn)有項(xiàng)目上啟用 Watch/Edit支持。在CVS的Watch/Edit支持被啟用時(shí),該項(xiàng)目中的文件處于只讀狀態(tài)。此時(shí),如果您在編輯器中打開(kāi)了某文件后又試圖對(duì)該 文件進(jìn)行修改,那么CVS服務(wù)器會(huì)被詢問(wèn)。在編輯文件時(shí),如果其他人也正在編輯該文件,那么就會(huì)出現(xiàn)一個(gè)對(duì)話框以通知您小組中其他成員也正在編輯該文件 (見(jiàn)圖5-9)。這時(shí),您可以繼續(xù)對(duì)該文件進(jìn)行編輯,但是在您提交該文件時(shí)需要進(jìn)行沖突管理。在文件被修改時(shí),檢查標(biāo)記修飾符 會(huì)被添加到該文件上。

    圖5-9 顯示其他人正在編輯同一文件的對(duì)話框

    在項(xiàng)目、文件夾以及文件上執(zhí)行Team | Show Editors操作后會(huì)打開(kāi)CVS Editors視圖。CVS Editors視圖中列出的是所有正在被其他人更新的資源(見(jiàn)圖5-10)。無(wú)論是否處于Watch/Edit的控制之下,您在任何項(xiàng)目及項(xiàng)目資源上都可 以使用Team | Show Editors操作。但是Team | Show Editors操作只會(huì)對(duì)啟用了Watch/Edit支持的項(xiàng)目資源進(jìn)行標(biāo)識(shí)。

    圖5-10 列出了哪個(gè)用戶正在更新文件夾中文件的CVS Editors視圖

    您可以使用Team | Edit操作來(lái)顯式地通知CVS服務(wù)器,讓CVS服務(wù)器知道您想對(duì)文件進(jìn)行更新。您還可以使用Team | Unedit操作來(lái)通知CVS服務(wù)器,讓CVS服務(wù)器知道您不想再編輯該文件。這樣,您所做的任何更改都會(huì)被從CVS資源庫(kù)中檢出。表5-3給出了有關(guān)這 些操作的信息。在向CVS提交了更改之后,Watch/Edit列表中的資源會(huì)被隱式刪除掉。

    Watch/Edit是一個(gè)非常有用的工具。但是該 工具的使用需要遵循一些規(guī)則,并要注意一些考慮事項(xiàng)。首先,如果要使Watch/Edit功能高效,那么小組中的每個(gè)成員都必須在存在潛在沖突的項(xiàng)目中啟 動(dòng)Watch/Edit功能。其次,您必須連接到CVS服務(wù)器上。如果您沒(méi)有和CVS服務(wù)器相連,并且想更新一個(gè)文件,那么您將不得不顯式地將該文件的只 讀狀態(tài)(從該文件的屬性頁(yè)面中可獲得該屬性)取消掉。當(dāng)然,該支持現(xiàn)在是折中的。這是因?yàn)椋瑳](méi)有任何人知道該更新,而且在提交過(guò)程中存在潛在的沖突。如果 您刪除了一個(gè)項(xiàng)目并且該項(xiàng)目資源的Watch/Edit首選項(xiàng)設(shè)置沒(méi)有被啟用,那么CVS服務(wù)器將不會(huì)被通知,并且CVS服務(wù)器會(huì)繼續(xù)向外報(bào)告您正在對(duì)這 些資源進(jìn)行編輯。如果您的小組計(jì)劃使用Watch/Edit支持,那么明智的做法是小組中所有人都啟用被標(biāo)注為Configure projects to use Watch/Edit on checkout的CVS Watch/Edit首選項(xiàng)設(shè)置。

    5.4.11 恢復(fù)被刪除的文件

    有時(shí)候,在文件被刪除并且更改被提交給CVS后,您 可能需要恢復(fù)所刪除的文件。幸運(yùn)的是,CVS不會(huì)將所刪除的文件從該文件所在的資源庫(kù)中移除。您可以使用Team | Restore from Repository操作來(lái)恢復(fù)所刪除的文件。如果被刪除的文件在資源庫(kù)中存在,那么您將看到一個(gè)對(duì)話框。在該對(duì)話框中,您可以選擇所要恢復(fù)的文件的具體 修訂版(見(jiàn)圖5-11)。而文件的最新修訂版則是一個(gè)對(duì)所刪除文件的引用。這是因?yàn)槲募h除是一個(gè)CVS修訂操作。

    圖5-11 顯示可恢復(fù)的被刪除文件的Restore from Repository對(duì)話框

    當(dāng)一個(gè)文件被恢復(fù)到工作空間中的時(shí)候,該文件被看作是一個(gè)新文件。在提交該文件之前或提交該文件時(shí),必須將該新文件添加到版本控制中。

    5.4.12 其他CVS用戶界面元素

    1. Checkout向?qū)?/h4>

    在New wizard對(duì)話框中獲得的是CVS向?qū)е械臋z出項(xiàng)目。通常,您會(huì)使用CVS Repositories視圖來(lái)檢出項(xiàng)目。但是,有些CVS資源庫(kù)是不允許被瀏覽的。在這種情況下,檢出向?qū)Э赡芫捅容^有用。但是在這種情況下,您必須預(yù)先知道該項(xiàng)目的名稱。

    2. CVS備忘單

    若要打開(kāi)Cheat Sheet Selection對(duì)話框,則選擇Help | Cheat Sheets…命令。對(duì)于CVS任務(wù)來(lái)說(shuō),備忘單用來(lái)為分支和合并操作提供幫助。

    作者:caoyinghui1986 發(fā)表于2009-8-28 21:53:00 原文鏈接
    閱讀:402 評(píng)論:0 查看評(píng)論

    posted @ 2009-08-28 13:53 shine_panda 閱讀(85) | 評(píng)論 (0)編輯 收藏

    Eclipse中CVS界面功能描述 (二)

    //原文地址:http://hi.baidu.com/xublog/blog/item/6d090c22ffe227f5d6cae22b.html

     

    5.4.3 CVS Annotate視圖

    CVS Annotate視圖與CVS Repository Exploring透視圖中的CVS Repositories視圖使用的是同一界面空間。CVS Annotate視圖用來(lái)標(biāo)識(shí)各版本文件中所添加的新行以及被更改過(guò)的行。CVS Annotate視圖還會(huì)指出做出這次修改的是誰(shuí)。現(xiàn)在您知道是誰(shuí)做出了這些難以解釋的更新,或者是誰(shuí)應(yīng)該對(duì)這些難以解釋的更新負(fù)責(zé)。對(duì)于所選擇的任何版 本來(lái)說(shuō),文件中所添加的新行會(huì)在編輯器中突出顯示(見(jiàn)圖5-4)。若要打開(kāi)CVS Annotate視圖,則從CVS Repositories視圖、CVS Resource History視圖的快捷菜單Team中選擇Show Annotation操作。打開(kāi)CVS Annotate視圖的一種比較方便的方法是從Navigator透視圖或Package Explorer視圖中所顯示的某一個(gè)文件上選擇Team | Show Annotation操作。在打開(kāi)CVS Repository Exploring透視圖時(shí)會(huì)打開(kāi)CVS Annotate視圖,CVS Resource History視圖,并且在編輯器中所打開(kāi)的文件的版本是最新的。CVS Annotate視圖中的選擇操作會(huì)將編輯器復(fù)位到被更新的代碼行,并且相應(yīng)的版本會(huì)在CVS Resource History視圖中突出顯示出來(lái)。相反,如果在編輯器中選擇了一行代碼,那么在CVS Repository Exploring透視圖的那些視圖中就會(huì)適當(dāng)?shù)貙?duì)所更改的對(duì)象進(jìn)行突出顯示。現(xiàn)在您就可以非常容易地對(duì)任何文本文件的、詳細(xì)的更改歷史信息進(jìn)行檢查。

    圖5-4 CVS Repository Exploring透視圖中的CVS Annotate視圖

    5.4.4 CVS Resource History視圖

    CVS Resource History視圖可顯示某一具體文件的所有版本的詳細(xì)信息(見(jiàn)圖5-5)。CVS Resource History視圖是CVS Repository Exploring透視圖的一部分。在CVS Repositories視圖中先選擇一個(gè)文件,然后再在單擊右鍵所出現(xiàn)的快捷菜單中選擇Show in Resource History命令,這樣您就可以看到該文件的歷史版本信息。在受CVS控制的項(xiàng)目上單擊鼠標(biāo)右鍵后所出現(xiàn)的Team快捷菜單項(xiàng)中也有Show in Resource History命令。作為一種查看文件歷史的快速方法,您可以將受CVS控制的工作空間中的某一文件拖放到CVS Resource History視圖以直接查看該文件的歷史信息。

    圖5-5 CVS Resource History視圖

    對(duì)于任何被選擇的修訂版本來(lái)說(shuō),與該修訂版本相關(guān)的 分支和版本標(biāo)記,連同該版本的文件被提交到資源庫(kù)時(shí)所提供的注釋,都會(huì)一起顯示在CVS Resource History視圖的底部(見(jiàn)圖5-5)。通過(guò)在CVS Resource History視圖的下拉菜單中進(jìn)行相應(yīng)選擇,我們可以隱藏該視圖中的“Tags”項(xiàng)和“Comment”項(xiàng)。

    文件的歷史記錄可能比較長(zhǎng),這時(shí),您可以使用CVS Resource History視圖工具欄上的Filter History過(guò)濾任務(wù)或?qū)傩? width= 按鈕來(lái)過(guò)濾CVS Resource History視圖。也可以根據(jù)作者、注釋值、日期變化等來(lái)對(duì)CVS Resource History視圖中的顯示內(nèi)容進(jìn)行過(guò)濾。CVS Resource History視圖工具欄上的Link with Editor操作 會(huì)使CVS Resource History視圖與當(dāng)前活動(dòng)編輯器(僅對(duì)CVS控制之下的文件)保持同步。

    對(duì)于在CVS Resource History視圖中被選擇的那些版本來(lái)說(shuō),您對(duì)它們可以執(zhí)行的操作是依賴于資源是否已被復(fù)制到工作空間而發(fā)生變化的。這些操作被列在表5-2中。

    表5-2 CVS Resource History視圖中的操作

    操    作

    描    述

    Compare

    該操作會(huì)對(duì)所選的兩個(gè)版本進(jìn)行相互比較

    Get Contents

    該操作會(huì)用所選版本的內(nèi)容來(lái)替換該資源的本地工作副本中的內(nèi)容

    Get Sticky Revision

    該 操作會(huì)將資源的本地工作副本還原為一個(gè)先前版本。本地副本會(huì)作為資源庫(kù)修訂版,并會(huì)保留相同的版本標(biāo)記。需要指出的是,只有在對(duì)CVS非常熟悉的情況下, 您才可以使用該操作。該操作的后果之一是,除非“sticky revision”標(biāo)記被移走(直接使用CVS命令),否則您不能提交任何進(jìn)一步的修改。當(dāng)然,您可使用Replace With | Latest from Repository操作返回到原版本。通常,除非您是一個(gè)熟練的CVS用戶,否則您可能不會(huì)對(duì)“sticky revision”標(biāo)記感興趣

    Open

    該操作會(huì)在編輯器中打開(kāi)所選的修訂版文件。這時(shí),您是不能對(duì)該版本文件作出任何更改的

                                               (續(xù)表)  

    操    作

    描    述

    Refresh View

    該操作會(huì)用CVS資源庫(kù)中的內(nèi)容來(lái)更新CVS Resource History視圖

    Show Annotation

    該操作會(huì)使Eclipe切換到CVS Repository Exploring透視圖,并使得CVS Annotate視圖變?yōu)楫?dāng)前焦點(diǎn)以顯示出所選文件的注釋

    Tag with Existing…

    該操作會(huì)將已有的資源庫(kù)版本或分支標(biāo)記應(yīng)用到所選的資源上。該操作是一個(gè)特殊的操作。請(qǐng)查看聯(lián)機(jī)幫助中的Moving Version Tags專題以獲得何時(shí)使用該操作的詳細(xì)信息

    5.4.5 查看CVS命令

    Eclipse Console視圖可顯示出CVS與Eclipse之間的所有的命令和響應(yīng);在您碰到問(wèn)題的時(shí)候,該視圖是非常有用的。在Eclipse Console視圖中還顯示了所發(fā)布的供用戶使用的任何Eclipse CVS操作的所有CVS命令。在Team | CVS | Console首選項(xiàng)頁(yè)面中,您可以對(duì)該控制臺(tái)的外觀和行為進(jìn)行配置。

    5.4.6 CVS是如何管理工作空間中項(xiàng)目的

    圖5-6顯示了Package Explorer視圖中一個(gè)處在CVS控制之下的項(xiàng)目。通過(guò)觀察圖標(biāo)上的標(biāo)記修飾符以及附加的文字信息,您可以很明顯地看出這一點(diǎn)。只有在啟用了 Workbench | Label Decorations首選項(xiàng)設(shè)置后,Eclipse才會(huì)在Package Explorer視圖中顯示附加文字信息。對(duì)于那些受版本控制所有資源來(lái)說(shuō),在它們的資源圖標(biāo)上都有一個(gè)很小的磁盤標(biāo)志修飾符 。對(duì)于那些CVS所不知道的、被添加到項(xiàng)目中的文件來(lái)說(shuō),在這些文件的圖標(biāo)中也有一個(gè)很小的標(biāo)志修飾符 。 在如圖5-6所示的Package Explorer視圖中,緊接著項(xiàng)目名后面的是該項(xiàng)目所屬CVS資源庫(kù)服務(wù)器的名稱(位于方括號(hào)中)。如果該項(xiàng)目是被作為一個(gè)分支部分來(lái)使用的,那么該分 支的名稱也會(huì)被包含在方括號(hào)中。文本修飾符>表明本地資源是一個(gè)傳出更改(outgoing change),這就意味著該本地資源已經(jīng)在本地修改過(guò),并與CVS中相應(yīng)內(nèi)容不一致。Package Explorer視圖中受CVS控制的文件夾(直至項(xiàng)目文件夾)也具有這個(gè)特征。資源名后面的圓括號(hào)中所顯示的文本表示的是該資源的文件格式(ASCII 格式或二進(jìn)制格式)。我們知道,對(duì)于ASCII文件來(lái)說(shuō),在CVS文件實(shí)例和本地文件實(shí)例之間的并行修改可被合并。而二進(jìn)制文件只能被替換。

    圖5-6 Label Decorations首選項(xiàng)被啟用時(shí)受CVS控制的項(xiàng)目

    在Team | CVS | Label Decorations首選項(xiàng)頁(yè)面中,您可以對(duì)CVS標(biāo)簽修飾的表示和規(guī)則進(jìn)行修改。

    5.4.7 在Team快捷菜單中可獲得的CVS操作

    Team菜單可從任何工作空間資源的快捷菜單中獲 得。有幾個(gè)CVS操作是與Team菜單相關(guān)的。我們將對(duì)使用CVS進(jìn)行工作維護(hù)中最常用的操作進(jìn)行總結(jié)。Team菜單下的具體子菜單隨著所選擇的是否是一 個(gè)項(xiàng)目而發(fā)生變化。只有在項(xiàng)目沒(méi)有被CVS或任何其他資源庫(kù)管理時(shí),所選擇的項(xiàng)目才會(huì)有一個(gè)Share Project…操作。表5-3所提供的是一個(gè)所有CVS小組操作的參考列表。其中有些操作可能是您不熟悉的。我們將在本章后面對(duì)這些操作進(jìn)行討論。通常 情況下,您最常用的操作是Share Project…、Synchronize with Repository…、Update…以及Commit…。Share Project操作是一個(gè)允許您將項(xiàng)目加到CVS中的綜合性向?qū)А亩xCVS資源庫(kù)連接到提交項(xiàng)目資源之間的每一個(gè)步驟都包括在該向?qū)е小?/p>

    表5-3 Team菜單中的CVS操作

    操    作

    描    述

    Add to .cvsignore…

    該 操作會(huì)將所選的項(xiàng)目文件排除在CVS管理之外。這些被排除的文件不會(huì)出現(xiàn)在Synchronize視圖之中,也不會(huì)被提交給CVS資源庫(kù)。CVS在您的項(xiàng) 目中維護(hù)了一個(gè)名為.cvsignore的文件。在該文件中會(huì)標(biāo)識(shí)出那些被排除的文件實(shí)例。一開(kāi)始,.cvsignore文件是不存在的;在該操作第一次 執(zhí)行時(shí),才會(huì)創(chuàng)建.cvsignore文件。您必須將.cvsignore文件添加到版本控制中,并在CVS中維護(hù)該文件

    Add to Version Control

    該操作會(huì)將所選文件置于CVS控制之下。典型情況下,在項(xiàng)目中創(chuàng)建新文件時(shí)會(huì)使用該操作。如果您沒(méi)有將資源顯式地添加到版本控制中,那么在執(zhí)行提交操作時(shí),Eclipse會(huì)對(duì)您作出提示

    Apply Patch…

    該操作將使用由Create Patch操作所創(chuàng)建的補(bǔ)丁文件來(lái)修補(bǔ)程序

    Branch…

    該操作會(huì)創(chuàng)建一個(gè)分支。這樣,項(xiàng)目(或所選資源)可獨(dú)立于其他開(kāi)發(fā)過(guò)程而被修改

    Change ASCII/Binary
    Property…

    執(zhí)行該操作后會(huì)顯示Set Keyword Substitution向?qū)АT撓驅(qū)г试S您為所選文件選擇期望的CVS關(guān)鍵字替換模式。它對(duì)CVS如何解釋ASCII或二進(jìn)制文件進(jìn)行了定義

    Commit…

    如 果沒(méi)有沖突發(fā)生,該操作會(huì)使用您的本地更改來(lái)更新CVS資源庫(kù),并會(huì)提示您給出一個(gè)注釋。如果執(zhí)行該操作時(shí)所選擇的操作對(duì)象是一個(gè)項(xiàng)目或文件夾,那么項(xiàng)目 或文件夾中的所有被修改資源都將提交到CVS中。如果CVS中的相應(yīng)文件取代了所要提交的文件,那么Commit…操作將失敗

    Create Patch…

    該操作會(huì)基于本地資源和CVS之間的不同而創(chuàng)建一個(gè)補(bǔ)丁文件。其他人可共享該補(bǔ)丁文件。這就允許在資源庫(kù)之外共享您的工作

    Disconnect…

    該操作會(huì)在所選工作空間項(xiàng)目中刪除所有CVS連接信息

                                                       (續(xù)表)  

    操    作

    描    述

    Edit

    該 操作只可用于那些啟用了Watch/Edit(可在項(xiàng)目的CVS屬性頁(yè)面或CVS首選項(xiàng)設(shè)置中啟用該功能)的項(xiàng)目。該操作會(huì)通知CVS服務(wù)器,讓它知道您 正在更新該文件。如果有其他人(一個(gè)或多個(gè))正在編輯該文件,那么您將被提示,以就是否繼續(xù)該操作作出決定。此時(shí),您可忽略該提示并對(duì)文件進(jìn)行修改。但 是,在您試圖對(duì)修改進(jìn)行提交時(shí)可能會(huì)碰到?jīng)_突。如果您只是想先打開(kāi)所要編輯的文件,那么該文件會(huì)被打開(kāi)。但是在試圖對(duì)該文件進(jìn)行修改時(shí),您會(huì)得到相同的提 示。如果要使用外部編輯器,那么您首先必須要做的是取消該文件的只讀狀態(tài),然后再使用外部編輯器打開(kāi)該文件。在后面,我們會(huì)對(duì)該操作繼續(xù)進(jìn)行討論

    Merge…

    該操作會(huì)將某一具體分支中的修改合并回該分支之前的代碼庫(kù)中

    Restore from

    Repository…

    對(duì)于那些被刪除的項(xiàng)目文件來(lái)說(shuō),如果它們?nèi)源嬖谟陧?xiàng)目中,并允許您將它們恢復(fù)回原工作空間,則執(zhí)行該操作后會(huì)列出這些被刪除的文件。在本章后面,我們將會(huì)對(duì)該操作進(jìn)行詳細(xì)討論

    Share Project…

    只有項(xiàng)目才能使用該操作。而且,只有在那些不受資源庫(kù)管理的項(xiàng)目上才可以看到該操作。執(zhí)行該操作后會(huì)顯示向?qū)АT谠撓驅(qū)е校梢酝瓿傻娜蝿?wù)有:將項(xiàng)目與一個(gè)可以使用的資源庫(kù)相關(guān)聯(lián),以及提交項(xiàng)目資源。其他資源庫(kù)提供程序也可能會(huì)使用該操作

    Show Annotation

    執(zhí)行該操作后將切換到CVS Repository Exploring透視圖,并會(huì)將焦點(diǎn)集中到CVS Annotate視圖以顯示出所選文件的注釋

    Show Editors

    該 操作適用于那些啟用了Watch/Edit(可在項(xiàng)目的CVS屬性頁(yè)面或CVS首選項(xiàng)設(shè)置中啟用該功能)的項(xiàng)目中的文件夾和文件。在執(zhí)行該操作后會(huì)打開(kāi) CVS編輯器視圖。在該視圖中會(huì)標(biāo)識(shí)出其他正在編輯該文件或該文件夾中內(nèi)容的用戶。只有那些啟用了Watch/Edit的項(xiàng)目才可能顯示在CVS編輯器視 圖中

    Show in Repository

    History

    該操作為所選資源顯示CVS Repository History視圖

    Synchronize with

    Repository…

    該 操作會(huì)將所選擇的文件與CVS資源庫(kù)中的對(duì)應(yīng)文件進(jìn)行比較,并切換到Team Synchronizing透視圖。比較后所發(fā)現(xiàn)的任何差異都會(huì)顯示在Synchronize視圖中。對(duì)于項(xiàng)目或文件夾來(lái)說(shuō),在執(zhí)行該操作時(shí),它們里面所 包含的全部資源都將與CVS中的對(duì)應(yīng)資源進(jìn)行比較。而那些與CVS中對(duì)應(yīng)資源相比發(fā)生了變化的資源會(huì)被顯示在Synchronize視圖中。在您檢查所有 更改、與資源庫(kù)實(shí)例進(jìn)行比較,以及解決沖突時(shí),這是一種最安全的CVS使用方法

    Tag as Version…

    該操作會(huì)為所選項(xiàng)目、文件夾(或文件)以及所有的子文件資源的所有CVS實(shí)例添加版本標(biāo)志。您也可以在CVS Repositories視圖中進(jìn)行版本標(biāo)識(shí)

                                                       (續(xù)表)  

    操    作

    描    述

    Unedit

    該 操作只可用于那些啟用了Watch/Edit(可在項(xiàng)目的CVS屬性頁(yè)面或CVS首選項(xiàng)設(shè)置中啟用該功能)的項(xiàng)目文件。該操作會(huì)將您從當(dāng)前正在編輯某一文 件的那個(gè)用戶列表中刪除掉。執(zhí)行該操作后,您會(huì)從當(dāng)前活動(dòng)用戶列表中被刪除,并且所做的任何更改都會(huì)被取消,而所編輯的文件會(huì)恢復(fù)到執(zhí)行任何更新之前的內(nèi) 容。在向CVS提交文件時(shí),如果工作空間副本與服務(wù)器副本完全相同,那么Unedit操作會(huì)被隱式調(diào)用。在本章后面部分,我們還將對(duì)該操作進(jìn)行討論

    Update…

    該 操作會(huì)使用CVS中所有最新版本來(lái)更新本地資源。CVS中的更新將與本地資源(二進(jìn)制文件除外)進(jìn)行合并。建議您在使用Commit…操作前執(zhí)行 Update…操作。如果其他人在您的最近一次更新后又進(jìn)行了提交操作,那么您的提交操作將會(huì)失敗。建議您用Synchronize with Repository…操作來(lái)代替Update…操作

    5.4.8 Team Synchronizing透視圖和Synchronize向?qū)?/h3>

    Team Synchronizing透視圖是您對(duì)工作空間與CVS(其他資源庫(kù)提供程序可被集成到Team Synchronizing透視圖中)進(jìn)行同步的大本營(yíng)。在選擇了Team | Synchronize with Repository…操作后,您會(huì)被提示并切換到Team Synchronizing透視圖。在Team Synchronizing透視圖中含有Synchronize視圖和一個(gè)編輯器區(qū)域。所有被打開(kāi)的編輯器都會(huì)顯示在該編輯器區(qū)域中。圖5-7所顯示的就 是一個(gè)Team Synchronizing透視圖的例子。在Synchronize視圖中,您可以對(duì)本地項(xiàng)目和該項(xiàng)目的CVS副本之間的差別進(jìn)行觀察和操作。其他想使用 該透視圖的資源庫(kù)提供程序也可使用該視圖。在打開(kāi)一個(gè)文件的同時(shí),Eclipse也會(huì)打開(kāi)一個(gè)適當(dāng)?shù)谋容^編輯器(文本、Java、XML或圖像)。在比較 編輯器中會(huì)顯示出工作空間文件和CVS中該文件的最新版本之間的差別。這樣,您就可以在將文件提交到CVS之前瀏覽和最終確定該文件的內(nèi)容。

    在Synchronize視圖的工具欄上有如下一組按鈕:Incoming Mode (從CVS中更新)、Outgoing Mode (提交到CVS)、Incoming and Outgoing Mode 以及Conflicts Mode 。 通過(guò)使用上述按鈕,您可以對(duì)同步信息進(jìn)行過(guò)濾。在使用了Incoming Mode按鈕后,您會(huì)看到有哪些操作正在進(jìn)行。如果小組中只有您一個(gè)人,那么可能只有Outgoing Mode按鈕才是您感興趣的。若要接受所有的傳入更改,則使用Synchronize視圖工具欄上的Update All Incoming Changes…按鈕 。若要提交您的所有更改,則使用Synchronize視圖工具欄上的Commit All Outgoing Changes…按鈕 。工具欄操作Pin Current Synchronization 允 許您對(duì)先前同步中所使用的一組資源進(jìn)行引用。Synchronize視圖的工具欄上的這些按鈕允許您通過(guò)工作集來(lái)過(guò)濾內(nèi)容。您可對(duì)比較標(biāo)準(zhǔn)進(jìn)行調(diào)整,并可 使用Layout菜單在樹(shù)、壓縮文件夾以及提交集(Commit Set)之間進(jìn)行視圖切換。提交集允許您查看資源庫(kù)更改。這些更改會(huì)按照提交者、注釋和提交日期來(lái)分類顯示。在確定傳入更改集的更詳細(xì)信息時(shí),這種分類非 常有用。Synchronize視圖擁有自己的Preferences對(duì)話框。在Synchronize視圖的菜單中,您可以打開(kāi)該 Preferences對(duì)話框。在Synchronize視圖的菜單中,您還可以執(zhí)行Schedule…操作。該操作允許您按照所選擇的某一重復(fù)進(jìn)度來(lái)自 動(dòng)執(zhí)行資源庫(kù)的同步操作。

    圖5-7 顯示傳入更改和傳出沖突文件三方比較的Team Synchronizing透視圖

    1. Synchronize向?qū)?/h4>

    從工作臺(tái)工具欄(或Synchronize視圖菜單欄)的下拉菜單中選擇Synchronize…操作 后 會(huì)出現(xiàn)Synchronize向?qū)АT赟ynchronize向?qū)е校梢詫?duì)要與CVS(以及其他那些被允許使用Eclipse小組同步支持的資源庫(kù)提 供程序)進(jìn)行同步的項(xiàng)目進(jìn)行選擇。如圖5-8所示,您可對(duì)工作空間、所選資源或者一個(gè)工作集進(jìn)行同步。在Synchronize向?qū)ЫY(jié)束后,您會(huì)返回到 Team Synchronizing透視圖。

    作者:caoyinghui1986 發(fā)表于2009-8-28 21:50:00 原文鏈接
    閱讀:1001 評(píng)論:0 查看評(píng)論

    posted @ 2009-08-28 13:50 shine_panda 閱讀(178) | 評(píng)論 (0)編輯 收藏

    Eclipse中CVS界面功能描述(一)

    //原文地址:http://hi.baidu.com/xublog/blog/item/b66d38afeb3688ca7dd92a2a.html

    Eclipse中的CVS用戶界面

    現(xiàn)在,您已經(jīng)對(duì)CVS有了一個(gè)基本的理解。接下來(lái), 我們將討論Eclipse是如何為CVS使用者提供幫助的。在對(duì)其進(jìn)行討論之前,先略為詳細(xì)地看一下Eclipse的CVS用戶界面。在開(kāi)始之 前,Eclipse的CVS用戶界面是毫無(wú)價(jià)值的。這是因?yàn)椋cEclipse中的很多操作相似,大多數(shù)的CVS資源庫(kù)訪問(wèn)操作都在后臺(tái)運(yùn)行,這些操作不 會(huì)對(duì)其他操作造成妨礙。諸如檢出、提交、同步等可能需要長(zhǎng)時(shí)間運(yùn)行的操作并不會(huì)對(duì)您所要完成的其他任務(wù)造成妨礙。在下面所給出的這個(gè)簡(jiǎn)短列表中,列出了在 Eclipse用戶界面中使用CVS時(shí)會(huì)碰到的最常見(jiàn)任務(wù)。在練習(xí)5中,您會(huì)實(shí)踐所有這些任務(wù)。

    ●       定義到CVS資源庫(kù)的連接。

    ●       瀏覽CVS資源庫(kù)。

    ●       將新的工作空間項(xiàng)目定義到CVS中。

    ●       從CVS中檢出已有項(xiàng)目。

    ●       將工作空間中的更改提交給CVS。

    ●       使用CVS中的最新版本來(lái)更新自己的工作空間項(xiàng)目。

    ●       在合適的里程碑處進(jìn)行版本設(shè)置。

    ●       用資源庫(kù)中的資源來(lái)比較或替換工作空間中的資源。

    5.4.1 CVS Repository Exploring透視圖:資源庫(kù)主頁(yè)

    如圖5-1所示的CVS Repository Exploring透視圖是在Eclipse中使用CVS的大本營(yíng)。在該透視圖中含有CVS Repositories視圖、CVS Resource History視圖以及編輯器區(qū)域。在CVS Repositories視圖中會(huì)顯示出您的工作空間所知道的CVS資源庫(kù)。而在CVS Resource History視圖中所顯示的則是受CVS控制的任何已知文件的修改歷史記錄。在CVS Repository Exploring透視圖中,您可以建立與CVS服務(wù)器的連接。

    5.4.2 CVS Repositories視圖

    CVS Repositories視圖扮演著資源庫(kù)瀏覽器的角色。在CVS Repositories視圖中,您可以對(duì)資源庫(kù)中存在的項(xiàng)目進(jìn)行選擇,并可將這些項(xiàng)目檢出到工作空間中。如圖5-1所示,CVS Repositories視圖位于CVS Repository Exploring透視圖的左邊窗格中。通過(guò)使用快捷菜單New | Repository Location...或選擇Add CVS Repository 命 令,您可以在自己的工作空間中定義CVS資源庫(kù)的位置。Eclipse支持各種類型的CVS連接(見(jiàn)圖5-2)。在CVS Repositories視圖中,您可以定義多個(gè)CVS資源庫(kù)。在瀏覽資源庫(kù)時(shí),您可以看到資源庫(kù)中的內(nèi)容。如圖5-1所示,這些內(nèi)容包括HEAD、 Branches、versions目錄中的項(xiàng)目以及Dates條目。您可展開(kāi)目錄樹(shù)或使用工具欄中的Go Into向前瀏覽圖像 和Back向后瀏覽圖像 操作來(lái)往下一直看到具體文件。在工具欄上有一個(gè)Refresh View 操作,由于CVS Repositories視圖不會(huì)與資源庫(kù)中的內(nèi)容更改自動(dòng)保持一致,所以在做任何重要操作之前,您可能要使用Refresh View 按鈕來(lái)刷新CVS Repositories視圖。

    出于方便的考慮,如果您從Resource透視圖中打開(kāi)了CVS Repositories視圖,那么該視圖將作為一個(gè)選項(xiàng)卡式視圖顯示在Navigator透視圖的旁邊。

    在CVS Repositories視圖中,一個(gè)最常見(jiàn)的任務(wù)是從資源庫(kù)中將項(xiàng)目檢出到您的工作空間中。要完成上述任務(wù),請(qǐng)先在Branches、HEAD或Versions下選擇一個(gè)項(xiàng)目,然后再在單擊鼠標(biāo)右鍵后所出現(xiàn)的快捷菜單中選擇Check Out命令。

    圖5-1 CVS Repository Exploring透視圖

    圖5-2 在工作空間中定義新的CVS資源庫(kù)位置

    在第一次展開(kāi)CVS Repositories視圖中的Branches目錄時(shí),您會(huì)看到該目錄中沒(méi)有任何內(nèi)容。在使用了快捷菜單操作Refresh Branches…后會(huì)出現(xiàn)Refresh Branches對(duì)話框(見(jiàn)圖5-3)。在Refresh Branches對(duì)話框中,您可以為一個(gè)或多個(gè)資源庫(kù)項(xiàng)目執(zhí)行CVS中的分支標(biāo)記檢索請(qǐng)求。CVS資源庫(kù)中可以包含大量分支。而您可能僅對(duì)其中的部分分支 感興趣。在Refresh Branches對(duì)話框中,您可以對(duì)要進(jìn)行分支標(biāo)記信息檢索的項(xiàng)目進(jìn)行選擇。在表5-1所示的參考列表中,列出了CVS Repositories視圖中的所有可用的快捷菜單操作。其中有些操作依賴于您在圖5-3的第3個(gè)欄目中的選擇。一開(kāi)始,您可能需要使用以下這些操 作:New | Repository Location…、Check Out…、Compare with…以及Show in Resource History。現(xiàn)在,您不必理解這些操作,它們僅為您提供一個(gè)參考。

    圖5-3 Refresh Branches對(duì)話框

    表5-1 在CVS Repositories視圖中可使用的上下文操作

    操    作

    描    述

    從快捷菜單中可獲得該命令

    Add to Branch

    List…

    將一個(gè)項(xiàng)目(但不包括該項(xiàng)目的內(nèi)容)添加至一個(gè)新的或已經(jīng)存在的分支上。該操作可代替Team | Branch操作。對(duì)于那些將在一個(gè)分支中單獨(dú)開(kāi)發(fā)的新項(xiàng)目來(lái)說(shuō),該操作是比較有用的

    被選擇的項(xiàng)目

    Check Out

    把從資源庫(kù)中所選擇的內(nèi)容復(fù)制到自己的工作空間中。而且文件夾可被檢出,同時(shí)該文件夾與項(xiàng)目的一致性會(huì)得到維護(hù)。對(duì)于含有獨(dú)立部分的大型項(xiàng)目來(lái)說(shuō),該操作非常有用

    被選擇的項(xiàng)目,以及在Branches、HEAD或Versions下所選擇的項(xiàng)目文件夾

    Check Out As…

    把從資源庫(kù)中所選擇的內(nèi)容復(fù)制到自己的工作空間中,并以另外一個(gè)名稱來(lái)命名。在對(duì)所做的更改進(jìn)行提交時(shí),該項(xiàng)目保持它在CVS中的初始一致性。當(dāng)需要在工作空間中同時(shí)擁有某一項(xiàng)目的多個(gè)實(shí)例時(shí),該操作非常有用

    被選擇的項(xiàng)目,以及在Branches、HEAD或Versions下所選擇的項(xiàng)目文件夾

                                                                                                                                   (續(xù)表)  

    操    作

    描    述

    從快捷菜單中可獲得該命令

    Compare

    在選擇了兩個(gè)資源庫(kù)文件后,執(zhí)行該操作會(huì)顯示出Compare視圖

    兩個(gè)被選擇的資源庫(kù)

    Compare With…

    該操作會(huì)打開(kāi)Compare with Branch or Verson對(duì)話框,并允許您將所選資源與Branches、HEAD或Versions中的資源進(jìn)行比較

    被選擇的資源

    Configure Branches and

    Versions…

    執(zhí)行該操作后將顯示出一個(gè)對(duì)話框。在所顯示的對(duì)話框中會(huì)顯示出資源中的分支或版本標(biāo)記。而對(duì)話框中所顯示的那些標(biāo)記會(huì)顯示在CVS Repositories視圖中

    各種對(duì)象

    Copy to Clipboard

    將連接字符串復(fù)制到寫字板上。例如:pserver: anonymous@dev.eclipse.org:/home/eclipse

    被選擇的資源庫(kù)

    Discard location

    從CVS Repositories視圖中刪除所選資源庫(kù)的位置定義

    被選擇的資源庫(kù)

    New | Date Tag…

    執(zhí)行該操作后會(huì)顯示出一個(gè)對(duì)話框以創(chuàng)建新的日期標(biāo)記

    被選擇的資源庫(kù),在CVS Repositories視圖中所選擇的Dates條目

    New | Repository Location…

    執(zhí)行該操作后將顯示出一個(gè)對(duì)話框以定義新的CVS資源庫(kù)位置。另外還可獲得一個(gè)工具欄圖標(biāo)

    任何對(duì)象

    Open

    執(zhí)行該操作后會(huì)在編輯器中打開(kāi)所選文件的最新版本

    被選擇的文件

    Properties

    顯示所選資源庫(kù)的屬性及其連接信息

    被選擇的資源庫(kù)

    Refresh Branches…

    執(zhí)行該操作后將顯示出一個(gè)對(duì)話框以允許您發(fā)現(xiàn)一個(gè)或多個(gè)項(xiàng)目的分支

    在CVS Repositories視圖中所選擇的Branches條目,被選擇(或沒(méi)有被選擇)的資源庫(kù)位置

    Refresh View

    使用資源庫(kù)的當(dāng)前信息來(lái)刷新CVS Repositories視圖

    各種對(duì)象

    Remove

    將所選的日期標(biāo)記從CVS Repositories視圖刪除掉

    被選擇的日期標(biāo)記

    Show Annotation

    該操作會(huì)為所選文件顯示CVS Annotate視圖

    被選擇的文件

    Show In Resource History

    該操作會(huì)在CVS Resource History視圖中顯示所選文件的版本歷史信息

    被選擇的文件

    Tag As Version…

    將一個(gè)版本標(biāo)記應(yīng)用到所選的資源及其子資源上

    被選擇的資源

    Tag With

    Existing…

    該操作會(huì)將一已有的資源庫(kù)版本或分支標(biāo)記應(yīng)用到所選的資源上。這是一個(gè)比較特殊的操作。有關(guān)何時(shí)使用該操作的更多信息請(qǐng)參見(jiàn)聯(lián)機(jī)幫助中的Moving Version Tags專題

    被選擇的資源

    作者:caoyinghui1986 發(fā)表于2009-8-28 21:47:00 原文鏈接
    閱讀:639 評(píng)論:1 查看評(píng)論

    posted @ 2009-08-28 13:47 shine_panda 閱讀(149) | 評(píng)論 (0)編輯 收藏

    Eclipse快速上手指南之使用CVS

    原文地址:http://hi.baidu.com/xublog/blog/item/6579e60e8364fdcc7bcbe19e.html

    版本控制在團(tuán)隊(duì)開(kāi)發(fā)中是必不可少的。CVS是優(yōu)秀的開(kāi)源版本控制軟件,Eclipse本身就內(nèi)置了對(duì)CVS的支持,只需簡(jiǎn)單配置,即可使用CVS。

      首先我們要正確安裝并配置好CVS服務(wù)器,通常Linux Server都自帶CVS服務(wù),不過(guò)命令行操作比較繁瑣。Windows下也有簡(jiǎn)單易用的CVS服務(wù)器,這里我們推薦CVSNT,可以下載CVSNT 2.0.51a,安裝并啟動(dòng)CVSNT:


      然后切換到Repositories面板,添加一個(gè)Repository,命名為/cvs-java,CVSNT會(huì)提示是否初始化這個(gè)Repository,選擇是:


      然后在Advanced面板上選中“Pretend to be a Unix CVS version”:


      然后,在Windows賬戶中為每一個(gè)開(kāi)發(fā)人員添加用戶名和口令。

      現(xiàn)在,CVSNT的安裝配置已經(jīng)完成,下一步,啟動(dòng)Eclipse,我們可以使用原有的Hello工程,或者新建一個(gè)Project,然后選擇菜單 Window->Show View->Other,打開(kāi)CVS->CVS Repositories:


      然后點(diǎn)擊按鈕 ,添加一個(gè)Repository:


      注意用戶名和口令直接填Windows的用戶名和口令,然后選中“Validate Connection on Finish”,點(diǎn)擊Finish完成:


      首先,我們要將一個(gè)現(xiàn)有的工程放到CVS服務(wù)器中,切換到Package Explorer,選中Hello工程,右鍵點(diǎn)擊,選擇Team->Share Project…:


      使用剛才我們添加的Repository,繼續(xù),并將所有文件都添加到CVS中,最后Eclipse提示Commit:


      填入一個(gè)簡(jiǎn)單的注釋,確定,然后Eclipse會(huì)把整個(gè)工程提交到CVS服務(wù)器,可以在Package Explorer中看到圖標(biāo)發(fā)生了變化,Hello.java文件后面會(huì)有版本號(hào)1.1。在CVS Repositories面板中刷新,可以看到剛添加進(jìn)來(lái)的工程:


      在團(tuán)隊(duì)開(kāi)發(fā)中,當(dāng)創(chuàng)建了一個(gè)基本的工程并提交到CVS后,別的開(kāi)發(fā)人員首先要Check Out這個(gè)工程到各自的本地計(jì)算機(jī)上,這里為了演示,首先我們?cè)赑ackage Explorer中刪除Hello工程,然后打開(kāi)CVS Repositories(如果沒(méi)有看到Repository就按照上面的方法添加Repository),選擇Hello工程,右鍵點(diǎn)擊,選擇 Check Out As…:


      作為一個(gè)Project簽出,就可以在Package Explorer中看到簽出的工程。

      當(dāng)對(duì)某些源文件作了修改后,需要提交更改到CVS服務(wù)器。選中更改的文件或工程,右鍵點(diǎn)擊,選擇Team->Commit…:


      然后填入簡(jiǎn)單的注釋,就可以提交到CVS服務(wù)器上了,可以看到源文件的版本號(hào)變成了1.2。

      以上簡(jiǎn)單介紹了如何搭建CVS服務(wù)器以及在Eclipse中如何使用CVS,可以參考CVS手冊(cè)以便了解Branch、Merge等更多功能的使用。
    作者:caoyinghui1986 發(fā)表于2009-8-28 21:40:00 原文鏈接
    閱讀:123 評(píng)論:0 查看評(píng)論

    posted @ 2009-08-28 13:40 shine_panda 閱讀(75) | 評(píng)論 (0)編輯 收藏

    打包工具是如何失敗的

        曾因項(xiàng)目的迫切需要計(jì)劃開(kāi)發(fā)一打包軟件,最終卻夭折。現(xiàn)在回想多有遺撼。不得不令我反思當(dāng)中的教訓(xùn)。
        我認(rèn)為要想開(kāi)發(fā)一個(gè)成功的軟件兩個(gè)大的環(huán)境是必不可少的,一個(gè)是外部環(huán)境,包括公司的支持,領(lǐng)導(dǎo)的鼓勵(lì)和擁有一個(gè)穩(wěn)定的,成熟的項(xiàng)目團(tuán)隊(duì),相對(duì)穩(wěn)定的用戶群體。還有一個(gè)是對(duì)軟件本身的規(guī)劃,包括對(duì)需求的明確,系統(tǒng)的架構(gòu),工作量的評(píng)估,明確的項(xiàng)目計(jì)劃和有序的計(jì)劃執(zhí)行。
         打包工具的失敗就是一個(gè)印證。
         打包工具的構(gòu)想是源于項(xiàng)目中,繁鎖的,重復(fù)的人工打包操作,包括從配置庫(kù)一下代碼,編譯,打包,上傳FTP等操作,由于打包后進(jìn)行問(wèn)題驗(yàn)證時(shí)又時(shí)常出問(wèn)題,所以該過(guò)程不得反復(fù)多次執(zhí)行。執(zhí)行過(guò)程中又難免出現(xiàn)放錯(cuò)文件,漏打文件等不必要的錯(cuò)誤從而嚴(yán)重影響項(xiàng)目進(jìn)度。
    打包工具就是為解決打包過(guò)程中的繁鎖操作,提供可視化界面,為打包提供一鍵式操作。一開(kāi)始構(gòu)想時(shí)好的。但是一開(kāi)始也是錯(cuò)的,因?yàn)榇虬ぞ咭婚_(kāi)始就缺乏一個(gè)可供運(yùn)作的外部環(huán)境。公司不知道有這個(gè)項(xiàng)目的存在,或許還稱不上是一個(gè)項(xiàng)目,因?yàn)樗皇俏覀€(gè)人提出的一個(gè)優(yōu)化項(xiàng)目流程的簡(jiǎn)單方案。但是也由于這個(gè)問(wèn)題,為項(xiàng)目的失敗埋下了一個(gè)定時(shí)炸彈。
    開(kāi)始對(duì)項(xiàng)目進(jìn)行簡(jiǎn)單的規(guī)劃后,包括簡(jiǎn)單的需求分析,系統(tǒng)的架構(gòu)。沒(méi)有正式的文檔,也沒(méi)有對(duì)文檔進(jìn)行評(píng)審和風(fēng)險(xiǎn)評(píng)估。就開(kāi)始著手開(kāi)發(fā)了。開(kāi)發(fā)過(guò)程中不斷的變更架構(gòu)(因?yàn)橐婚_(kāi)始就沒(méi)有一個(gè)好的架構(gòu)),不斷的變更需求(雖然需求是自己做的),沒(méi)改一個(gè)地方,對(duì)代碼都是翻天覆地的變化,當(dāng)中的辛酸或許只有我自己才能體會(huì)。先拋開(kāi)架構(gòu)不說(shuō),為什么自己做的需求,自己開(kāi)發(fā),需求都還會(huì)變呢?那是因?yàn)樵陂_(kāi)發(fā)過(guò)程中,你站在用戶的角度一想,發(fā)現(xiàn)那樣做確實(shí)不當(dāng),得改。這就告訴我們問(wèn)題越早發(fā)現(xiàn),就越容易被解決。想想如果該需求是在需求文檔中詳細(xì)體現(xiàn)出來(lái),在需求評(píng)審的時(shí)候被發(fā)現(xiàn),那改改文檔也就了事了,等到了開(kāi)發(fā)時(shí)才發(fā)現(xiàn)這個(gè)問(wèn)題,想想那個(gè)時(shí)候去改那又會(huì)有多大的改動(dòng)。這也告訴我們好的文檔不僅能有效的指導(dǎo)開(kāi)發(fā),提高質(zhì)量。也能更及時(shí)的發(fā)現(xiàn)問(wèn)題,避免不必要的改動(dòng)。更是后期維護(hù)升級(jí)的一個(gè)依據(jù)。
    當(dāng)然這些變化還不足以讓一個(gè)項(xiàng)目夭折。打包工具一開(kāi)始規(guī)劃其中一部份包含了對(duì)開(kāi)發(fā)人員的代碼進(jìn)行檢視等功能,但由于公司推出了一個(gè)工具已經(jīng)具備這一功能,使得打包工具的這一需求已不在具備這一用戶群體。所以穩(wěn)定的用戶群體在一個(gè)軟件開(kāi)發(fā)過(guò)程中也是一個(gè)不可忽視的環(huán)節(jié)。
          在項(xiàng)目開(kāi)發(fā)到中期,我被分配到一個(gè)實(shí)際項(xiàng)目中,由于沒(méi)有多余的時(shí)間來(lái)做這個(gè)不被重視的工具,打包工具開(kāi)始慢慢夭折。從這個(gè)事分析,我個(gè)人其實(shí)也算是這個(gè)項(xiàng)目的一個(gè)穩(wěn)定項(xiàng)目團(tuán)隊(duì)。我被分配到其它項(xiàng)目中就算是為這個(gè)穩(wěn)定的團(tuán)隊(duì)帶來(lái)了不穩(wěn)定因素。結(jié)果導(dǎo)致項(xiàng)目夭折。可見(jiàn)一個(gè)穩(wěn)定的,成熟的項(xiàng)目團(tuán)隊(duì)在項(xiàng)目中的重要性。
    這個(gè)項(xiàng)目雖然失敗了,但我從中吸取了很多教訓(xùn)。如果再給我一次機(jī)會(huì)來(lái)做這個(gè)項(xiàng)目,有幾個(gè)事情我必須得做。
         1,向公司審請(qǐng),將該項(xiàng)目作為公司內(nèi)部項(xiàng)目正式立項(xiàng)。確保有一個(gè)穩(wěn)定的外部環(huán)境。
         2,向廣大用戶(開(kāi)發(fā)人員)收集需求,整理形成軟件的基本規(guī)格。
         3,明確制定項(xiàng)目計(jì)劃,有組織,有目地的進(jìn)行研發(fā)。
         4,根據(jù)基本規(guī)格編寫需求文檔,明確功能點(diǎn),進(jìn)行大眾評(píng)審,及時(shí)發(fā)現(xiàn)問(wèn)題。
         5,制定詳細(xì)的架構(gòu)規(guī)劃。進(jìn)行評(píng)審。
         6,協(xié)調(diào)有扎實(shí)功底的開(kāi)發(fā)人員,確保技術(shù)難題被攻破
         7,協(xié)調(diào)有豐富經(jīng)驗(yàn)的測(cè)試人沒(méi),保證版本質(zhì)量

    作者:caoyinghui1986 發(fā)表于2009-8-28 21:27:00 原文鏈接
    閱讀:89 評(píng)論:1 查看評(píng)論

    posted @ 2009-08-28 13:27 shine_panda 閱讀(79) | 評(píng)論 (0)編輯 收藏

    Hibernate查詢技巧

    Create DataBase SHOPPING;
    
    go
    
    use SHOPPING;
    
    go
    
    
    
    
    
    /*==============================================================*/
    
    /* Table: CATEGORIES                                            */
    
    /*==============================================================*/
    
    create table CATEGORIES (
    
       CATEGORY_ID          bigint               identity,
    
       CATEGORY_NAME        varchar(100)         not null,
    
       CATEGORY_DESCN       varchar(500)         null,
    
       constraint PK_CATEGORIES primary key  (CATEGORY_ID)
    
    )
    
    go
    
    
    
    
    
    
    
    /*==============================================================*/
    
    /* Table: PRODUCTS                                              */
    
    /*==============================================================*/
    
    create table PRODUCTS (
    
       PRODUCT_NO           varchar(10)          not null,
    
       CATEGORY_ID          bigint               not null,
    
       PRODUCT_NAME         varchar(300)         not null,
    
       PRODUCT_PRICE        float                not null,
    
       PHOTO_PATH           varchar(100)         null,
    
       PRODUCT_DESCN        varchar(2000)        null,
    
       constraint PK_PRODUCTS primary key  (PRODUCT_NO)
    
    )
    
    go
    
    
    
    
    
    
    
    /*==============================================================*/
    
    /* Table: PRODUCT_SUPPLY                                        */
    
    /*==============================================================*/
    
    create table PRODUCT_SUPPLY (
    
       SUPPLY_NO            varchar(10)          null,
    
       PRODUCT_NO           varchar(10)          null
    
    )
    
    go
    
    
    
    
    
    /*==============================================================*/
    
    /* Table: SUPPLIERS                                             */
    
    /*==============================================================*/
    
    create table SUPPLIERS (
    
       SUPPLY_NO            varchar(10)          not null,
    
       SUPPLY_NAME          varchar(200)         not null,
    
       SUPPLY_DESCN         varchar(400)         null,
    
       constraint PK_SUPPLIERS primary key  (SUPPLY_NO)
    
    )
    
    go
    
    
    
    /*==============================================================*/
    
    /* Create Relation                                              */
    
    /*==============================================================*/
    
    alter table PRODUCTS
    
       add constraint FK_PRODUCTS_REFERENCE_CATEGORI foreign key (CATEGORY_ID)
    
          references CATEGORIES (CATEGORY_ID)
    
    go
    
    
    
    alter table PRODUCT_SUPPLY
    
       add constraint FK_PRODUCT__REFERENCE_PRODUCTS foreign key (PRODUCT_NO)
    
          references PRODUCTS (PRODUCT_NO)
    
    go
    
    
    
    alter table PRODUCT_SUPPLY
    
       add constraint FK_PRODUCT__REFERENCE_SUPPLIER foreign key (SUPPLY_NO)
    
          references SUPPLIERS (SUPPLY_NO)
    
    go
    
    

     

    創(chuàng)建數(shù)據(jù)庫(kù)腳本的

    PRODUCTS(產(chǎn)品表) 和 CATEGORIES(類別表)一對(duì)多      PRODUCT_SUPPLY  為中間表 SUPPLIERS(供貨商表)    和 PRODUCTS 為多對(duì)多的關(guān)系。

    products 表 hbm.xml                 

                           <many-to-one name="category" class="Category" cascade="save-update">
    
    				<column name="CATEGORY_ID" />
    
    			</many-to-one>
    
    			<!--多對(duì)多的關(guān)系中table指向的是中間表-->
    
    			<set name="supplys" table="PRODUCT_SUPPLY" cascade="save-update">
    
                                    <!--key指向的是外鍵-->
    
    				<key column="PRODUCT_NO"></key>
    
                                    <!--column對(duì)應(yīng)中間表中的外鍵-->
    
    				<many-to-many class="Supply" column="SUPPLY_NO"></many-to-many>
    
    			</set>

    category  表 hbm.xml 

     

    <set name="productes" table="productes" cascade="save-update" inverse="true">
    
                                    <!--key指向的是外鍵-->
    
    				<key column="CATEGORY_ID"></key>
    
    				<one-to-many class="Product"/>
    
    </set>
    supply  表 hbm.xml
    <set name="products" table="PRODUCT_SUPPLY" inverse="true" cascade="save-update">
    
    				<key column="SUPPLY_NO"></key>
    
    				<many-to-many class="Product" column="PRODUCT_NO"></many-to-many>
    
    </set>

    1, 添加一個(gè)的新商品名稱為”Compaq 2620” 該商品屬于“筆記本”類別 由當(dāng)前所有的提供商提供貨源

                            List list   = session.createQuery("from Supply").list();    Category c = (Category) session.get(Category.class, new Long(1));        product.setCategory(c);    product.setSupplys(new HashSet(list));        session.save(product);

    2, 查詢編號(hào)為” S0001”的提供商提供的所有商品                                                         //通過(guò)隱式內(nèi)連接導(dǎo)航 List list   = session.createQuery("from Product p where p.supplys.supply_no='S0001'").list(); 隱式內(nèi)連接導(dǎo)航 要注意的一個(gè)問(wèn)題是 從many端到 one 端 可以無(wú)限導(dǎo)航 但從one到many端只能導(dǎo)航一級(jí)

    3,查詢編號(hào)為”S0002”的提供商提供的所有商品所涉及的類別 session.createQuery("from Category c  where c.productes.product_no in (select p.product_no from Product p where p.supplys.supply_no='S0002' ) ").list(); 用到子查詢

    4,查詢名稱為”TCL SHE8533”的商品的每個(gè)提供商的編號(hào)、名稱(部分屬性查詢) session.createQuery("select s.supply_no,s.supply_name from Supply s where s.products.product_name='TCL SHE8533'").list(); //投影查詢。如果想將查詢出來(lái)的 結(jié)果封裝成對(duì)象 用 select new  package.Temp(s.a,s.b...) from ....   Temp提供相應(yīng)的構(gòu)造方法包含可選的字段注意帶包名。

    5, 查詢多于3種商品的類別信息(使用size函數(shù)處理) session.createQuery("from Category s where s.productes.size>3").list(); 注意其中的 size 表示的是 商品類別中產(chǎn)品數(shù)量多于3的類別。size用來(lái)處理集合中的大小

    6,查詢至少有一個(gè)商品的類別信息(使用exists處理)  session.createQuery("from Category c where exists( from c.productes) ").list();

    7,查詢可以提供某種商品的供應(yīng)商信息(使用elements處理) session.createQuery("from Supply s where :product in elements(s.products) ")..setParameter("product", product).list(); product為 一個(gè) 對(duì)象 。 product in elements(s.products) 表示這個(gè)對(duì)象是否在這個(gè)集合中

    8,使用本地SQL,顯示所有商品的商品名、價(jià)格以及類別信息,并降序排列。 session.createSQLQuery("select p.PRODUCT_NAME,p.PRODUCT_PRICE ,c.*  from PRODUCTS p ,CATEGORIES c where p.CATEGORY_ID = c.CATEGORY_ID order by p.PRODUCT_PRICE desc") 的到的 集合中是個(gè) Object[];  如果想返回對(duì)象 可以用 命名sql并在配置文件中指定返回的對(duì)象類型。

    9 分頁(yè)查詢 :將商品按價(jià)格升序排列后,取第三頁(yè)的記錄,(每頁(yè)顯示2條記錄)  Query query = session.createQuery("from Product p order by  p.product_price  ")                      .setFirstResult(2*(3-1))                      .setMaxResults(2);

     

    10,查詢所有類別的名字,及該類別包含的商品數(shù)量 (使用group by ,count函數(shù)) session.createQuery("select max(c.category_name), count(p)  from Category c inner join c.productes p  group by c.category_id   ") 還有一種簡(jiǎn)單的方式就是  "select c.category_name, c.products.size   from Category c "

    11,批處理: 將某個(gè)類別下的商品修改為現(xiàn)有的另一個(gè)類別。 int count = session.createQuery("update Product p  set p.category=:category where p.category.category_id='1'")                             .setParameter("category",c ).executeUpdate(); c為加載的一個(gè)新的類別

    12,往數(shù)據(jù)庫(kù)中初始化3個(gè)名稱相同的商品(其他字段自行設(shè)置)。     要求:查詢所有商品,如果多個(gè)商品的名稱相同,則取其中任意一個(gè)完整的商品信息

    hql  = "from Prodcut pp where pp.product_no in (select max(p.category_id) from Product p group by p.product_name") ; 注意后面的一個(gè) 小技巧。 由于group by 后只能包含 group by字段和聚合函數(shù) 所以如果我想?yún)^(qū)別的字段似乎不可能 。但我們不妨將你要取的那個(gè)字段也加個(gè)聚合函數(shù)min 或 max 這樣就可以取出你要的 任意字段了。適應(yīng)sql sql2000中不妨 在pubs 下運(yùn)行 select max(title_id) as 編號(hào) ,count(type) as  數(shù)量, type from titles group by type 看看結(jié)果就知道了 雖然只 group by 了 type但 還是可以得到title_id

     

     

    作者:caoyinghui1986 發(fā)表于2008-6-15 12:39:00 原文鏈接
    閱讀:3040 評(píng)論:2 查看評(píng)論

    posted @ 2008-06-15 04:39 shine_panda 閱讀(81) | 評(píng)論 (0)編輯 收藏

    子窗體如何傳值到父窗體并調(diào)用父窗體的函數(shù)

    <!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <script>  //供DEMO02_01頁(yè)面的關(guān)閉按鈕調(diào)用  function myFunction(v){   //alert("這里是父窗口中的函數(shù)"+v);   document.getElementById("parentText").value=v;  }  

     //打開(kāi)新窗口  function openNewWindow(){   window.open("DEMO02_01.html","","height=300;width=300;location=0;status =0;toolbar=0");

     }

    </script> </head>

    <body>

    <button onclick="openNewWindow();">打開(kāi)新窗口</button> <hr> 此文本框的值要從子窗口中取得 <input type="text" id="parentText"> </body> </html>

    DEMO02_01.html

    <!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <script>  function funClose(){      //:調(diào)用父窗體(DEMO02.html)中的myFunction 函數(shù)   //window.opener獲得父窗口的window對(duì)象的引用 并調(diào)用 myFunction () 函數(shù)在js中作為window的屬性   window.opener.myFunction(document.getElementById("childText").value);

      window.close();  } </script>

    </head>

    <body> <button onclick="funClose();">關(guān)閉本窗口</button> <hr> 此文本框的值將要傳遞到父窗口 <input type="text" id="childText" value="子窗口的值:1"> </body> </html>

    作者:caoyinghui1986 發(fā)表于2008-6-15 12:31:00 原文鏈接
    閱讀:654 評(píng)論:1 查看評(píng)論

    posted @ 2008-06-15 04:31 shine_panda 閱讀(822) | 評(píng)論 (0)編輯 收藏

    模式窗口的使用

    <!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <script>  //補(bǔ)充完成下邊的函數(shù),打開(kāi)新的一個(gè)模式窗口  function openShowModalDialog(){      var obj = window;      var params  = new Array("aaaa",obj);

      var returnValue = window.showModalDialog("DEMO04_01.html",params);

      document.getElementById("showContentDiv").innerHTML=returnValue;

     }

      </script>

    </head>

    <body>

    <h1>模式窗口的使用:</h1> <h3>補(bǔ)充完成openShowModalDialog函數(shù),打開(kāi)新的一個(gè)模式窗口</h3> <button onclick="openShowModalDialog();">打開(kāi)新的模式窗口</button> <br> <hr> <div id="showContentDiv">

    </div>   </body> </html>

    DEM004-01.html

    <!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head>

    <script>

     //補(bǔ)充完成函數(shù),將文本框returnValue的值設(shè)置為父窗口返回值,并關(guān)閉本窗口  function closeShowModalDialog(){        //獲得模式窗體的參數(shù)。         var p = window.dialogArguments;          window.returnValue=document.getElementById("returnValue").value;      //設(shè)置父窗體的返回值 p[1] 事實(shí)上是拿到了父窗體的引用      p[1].returnValue=document.getElementById("returnValue").value;

         window.close();  }   </script>

    </head>

    <body>

    <h1>模式窗口的使用:</h1> <h3>補(bǔ)充完成closeShowModalDialog函數(shù),將文本框returnValue的值設(shè)置為父窗口返回值,并關(guān)閉本窗口</h3> <button onclick="closeShowModalDialog();">設(shè)置返回值,并關(guān)閉窗口</button> <hr> 窗口的返回值 <input type="text" id="returnValue" value="在這里設(shè)置返回值">   </body> </html>

    作者:caoyinghui1986 發(fā)表于2008-6-15 12:27:00 原文鏈接
    閱讀:365 評(píng)論:0 查看評(píng)論

    posted @ 2008-06-15 04:27 shine_panda 閱讀(433) | 評(píng)論 (0)編輯 收藏

    框架中取值問(wèn)題

    DEM003.html

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    
    <head>
    
    </head>
    
    
    
    <frameset rows="70,*" cols="*" framespacing="0" frameborder="yes" style="border:0px">
    
      <frame src="DEMO03_bar.html" name="bar" scrolling="No" noresize="noresize" id="bar"arginwidth="0" marginheight="0" />
    
      <frameset cols="150,*" frameborder="yes" border="1" framespacing="0">
    
        <frame src="DEMO03_menu.html" name="menu" scrolling="No" noresize="noresize" id="menu" marginwidth="0" marginheight="0" />
    
        <frame src="DEMO03_main.html" name="mainFrame" id="main" marginwidth="0" marginheight="0" />
    
      </frameset>
    
    </frameset>
    
    <noframes><body>
    
    </body>
    
    </noframes></html>
    
    

    DEM003_bar.html

    <!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <script>  //補(bǔ)充完成此函數(shù),用于刷新Menu窗體的頁(yè)面  function flushMenuFrame(){      //top表示頂級(jí)窗口 的 window對(duì)象   window.top.menu.location.href="DEMO03_menu.html";  }  

     //補(bǔ)充完成此函數(shù),將barText文本框的值寫入到Main窗口的mainText中去。  function writeValueToMainFrame(){      //parent表示 但前窗口的 上級(jí)窗口的 window對(duì)象        window.parent.mainFrame.document.getElementById("mainText").value=document.getElementById("barText").value;    } </script>

    </head>

    <body> <center>BAR頁(yè)面</center> <button onclick="flushMenuFrame();">刷新框架Menu窗口的頁(yè)面</button> Bar頁(yè)面的文本框:<input type="text" id="barText" value="Bar頁(yè)面的值1"><button onclick="writeValueToMainFrame();">向Main窗口寫值</button> </body> </html>

    DEMO003_main.html

    <!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> </head>

    <body> <center>Main窗體</center> <br><br> Main窗體中的文本框 <input type="text" id="mainText" value="Main頁(yè)面的值2"> </body> </html>

     

    作者:caoyinghui1986 發(fā)表于2008-6-15 12:24:00 原文鏈接
    閱讀:267 評(píng)論:0 查看評(píng)論

    posted @ 2008-06-15 04:24 shine_panda 閱讀(78) | 評(píng)論 (0)編輯 收藏

    <2008年6月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    293012345

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿

    隨筆檔案

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲av成本人无码网站| 久久99国产乱子伦精品免费| 在线天堂免费观看.WWW| 国产亚洲人成A在线V网站| 日本亚洲免费无线码 | 免费人成视频在线观看网站| 免费一级毛片免费播放| 亚洲人成影院午夜网站| 毛片免费在线观看| 亚洲综合精品网站在线观看| 国产午夜亚洲精品国产| 一级毛片免费观看不卡视频| 亚洲国产人成精品| 亚洲另类无码专区首页| 99久久国产热无码精品免费 | 丁香花在线观看免费观看图片| 精品免费久久久久久成人影院| 亚洲综合久久成人69| 在线观看片免费人成视频播放| 国产精品冒白浆免费视频| 久久精品亚洲AV久久久无码 | 亚洲精品无码专区在线在线播放| 黄人成a动漫片免费网站| 性xxxx视频播放免费| 亚洲国产成人在线视频| 三年片在线观看免费大全电影 | 亚洲国产成人久久综合碰| 亚洲人成网亚洲欧洲无码| 91免费资源网站入口| 亚洲无砖砖区免费| 精品免费久久久久久久| 亚洲精品人成在线观看| 最近中文字幕免费大全| 亚洲啪啪AV无码片| 久久久久久毛片免费看| 国产精品亚洲玖玖玖在线观看| 免费无码专区毛片高潮喷水 | 亚洲精品乱码久久久久久不卡| 国产精品日本亚洲777| 美女被免费视频网站a国产| 亚洲人成色77777在线观看|