|
來自:http://www.javaeye.com/topic/17518?page=1 問題是我覺得rich domain object 和domain Dao雙向依賴的關系我也很不喜歡。我覺得那么就像現在那么樣,thin
domain
object,外加Dao層和Service層,單向依賴,分層很清楚,要么就向rails那樣,就是一個model,管你dao還是service,全
部都在model里面。 赫赫,請問,沒有domain model ,何來dao ,何來敲擊鍵盤而來的代碼?
dao依賴domain model是很理所當然的。 不過讓domain model依賴于dao,確實很拗口,所以dao肯定需要一個接口,domain model依賴于dao的接口也是很合理的。這里的關鍵在于:
把DAO已經published的接口作為整個領域模型比較核心的一部分。 如果設計比較好的ORM 關聯可能會把引入query 導致的雙向依賴的危險減至最小,不會因為DAO接口實現的失敗導致整個領域模型的錯誤,而把這種錯誤轉變為領域模型關聯關系的設計錯誤。
這里有個publish接口容易導致被誤用的危險,DAO接口如果是領域模型提出的請求實現,那么這個設計就會很冒風險,因為如果一旦你的DAO接
口publish了,你就要冒著別的正在寫domain
model的開發人員會耦合于你的接口,一旦你的接口publish了,改動就非常困難了,而且如果一旦發現因為需求分析不夠導致的DAO接口邏輯有問
題,那么這個將是非常痛苦的重構/修改過程。
所以關鍵在于讓合理的關聯代替復雜的查詢。 說到接口,順便說說對滿天飛的interface的反感,我以前就是那樣滿天飛的,先在感覺飛的太高了。 接口其實就等同于代碼隱藏,說句不好聽的話就是代碼私有化。 我發布一個接口,加上一些比較清晰的說明。
調用著一般都會只看接口說明感覺合適就直接IOC進來用了,久而久之就有可能被誤用接口的危險。
如果沒有接口,依賴代碼就是文檔的和相互可以修改的原則,那么大家都可以直入對方的正體,看一下對方代碼的具體實現邏輯,有問題可以直接提出來探討,這樣
就減少了程序風險,而且也省去了來來回回反反復復修改interface 和實現的麻煩。
接口就如同是一個蓋子,蓋住了很多東西,然而在代碼極度共享和互改的環境中,還是少用為妙。 我的觀點是一個重要的接口都應該提供一個抽象類來實現基本的骨架!這樣當你的接口改動時只影響你的抽象類。而對實現接口的繼承抽象類的子類沒有影響。
其實接口只是定義mixin(混合類型)的理想選擇(java中接口才允許多繼承),
例如:一個教練本身也是球員。那么我們可以定義一個mixin接口,組合一些新的方法讓實現這個mixin的抽象類不僅具有Train和Play的職責,
還有組合產生的特性。 一個缺點:不支持分布式部署。無法把一個bean給fail over或者re-deploy。
實際上,所有輕量級ioc容器真用起來都沒什么用處,因為它們都無法應付分布式的需求。(jboss mc的作者跟我說的) 呵呵?誰有分布式的需求? spring不是支持集群了嗎?分布式就用不著了吧 有一個收費的T字頭的方案能幫助spring實現分布式吧,沒有免費的實現是挺麻煩的。 我們的做法是在5臺tomcat服務器前面放一臺四層交換機之類的硬件,這樣,相同的ip來訪問時會被指派到同一臺tomcat,因此不需要http session共享,也能達到類似的分布式效果,還節約了session共享的消耗。 說到接口,順便說說對滿天飛的interface的反感,我以前就是那樣滿天飛的,先在感覺飛的太高了。
一直覺得interface就是C++里的.h 頭文件,好不容易java里不需要.h,脫了苦海,現在大家又爭先恐后再入火坑。 其實如果把interface用于動態proxy, cglib已經提供了解決方案,spring的OAOP,測試時的easyMock,都有cglib實現,性能比基于interface proxy的更高一點點。 如果是代碼設計方面的,一定要看清楚實際情況再決定是否抽象interface。我覺得interface在代碼設計方面最主要的應用其實是多重繼承吧和firebody說的蓋子功能吧。 所以springside里只有幾個用到多重繼承和webservice蓋子的時候才用了interface. 比如dao, appfuse等sample為了演示多種dao方案才用interface阿,我們沒事又不會換orm方案的,忙活這個接口沒意義呀。
IE有3種方式都可以創建一個元素:
1 document.createElement("<input type=text>") 2 document.createElement("<input>") 3 document.createElement("input")
Firefox只支持一種方式: document.createElement("input");document.setAttribute(name,value);
------------ 注: 在一個節點下增加子節點 IE也比Firefox下的方式要多.
IE:??
1 node.insertBefore(Element) 2 node.insertAfter(Element) 3 node.appendChild(Element)
而Firefox僅支持 node.appendChild.
在IE里面,html元素如果可以作為容器,那么在document.createElement創建元素時是無法設置name屬性的,比如:div,span,font等等。 相反不可以做為容器的,在用document.createElement創建元素時可以設置控件的name屬性,比如:input,button,a,img等等
1,在jsp引入以下js,其中custService是自己命的名 <script type='text/javascript' src='<%=request.getContextPath() %>/dwr/engine.js'> </script> ??? <script type='text/javascript' src='<%=request.getContextPath() %>/dwr/util.js'> </script> ??? <script type='text/javascript' src='<%=request.getContextPath() %>/dwr/interface/custService.js'> </script> ??? 2,在web.xml配置 <servlet> ??? <servlet-name>dwr-invoker</servlet-name> ???? <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class> ??? <init-param> ????? <param-name>debug</param-name> ????? <param-value>true</param-value> ??? </init-param> ??? <init-param> ????? <param-name>activeReverseAjaxEnabled</param-name> ????? <param-value>true</param-value> ??? </init-param> ??? <init-param> ????? <param-name>initApplicationScopeCreatorsAtStartup</param-name> ????? <param-value>true</param-value> ??? </init-param> ??? <init-param> ????? <param-name>maxWaitAfterWrite</param-name> ????? <param-value>100</param-value> ??? </init-param> ??? <!-- ??? <init-param> ????? <param-name>org.directwebremoting.extend.ServerLoadMonitor</param-name> ????? <param-value>org.directwebremoting.impl.PollingServerLoadMonitor</param-value> ??? </init-param> ??? --> ??? <load-on-startup>1</load-on-startup> ? </servlet>
? <servlet-mapping> ??? <servlet-name>dwr-invoker</servlet-name> ??? <url-pattern>/dwr/*</url-pattern> ? </servlet-mapping> ? ?3,dwr.xml,放在web-info下,其中 custService為spring中的bean名 ?<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "<dwr> ?<allow> ??<create creator="spring" javascript="custService"> ???<param name="beanName" value="custService" /> ??</create> ?</allow> </dwr>
4, function refreshSelect(){ var type =$("seltype").value; if('dept'==type){ getDeptList(); } else if('xm'==type){ getXmList(); } }
function getDeptList() { ? custService.getDeptList(function(data) { ? var deptlist =document.getElementById("selectlist"); dwr.util.removeAllOptions("selectlist"); ? dwr.util.addOptions("selectlist",data); ? }); }
function getXmList() { ? custService.getXmList(function(data) { ? var deptlist =document.getElementById("selectlist"); dwr.util.removeAllOptions("selectlist"); //dwrutil的特有方法 ? dwr.util.addOptions("selectlist",data); // ? }); }
5,spring中service的方法: ?public Map getDeptList() { ??? Map map = new TreeMap();//排序,不用Hashmap ?? map.put("", "選擇一個部門"); ??List l = this.typeService ????.getList("from Dept a where a.enabled = '0' order by a.ordernum"); ??for (Iterator iterator = l.iterator(); iterator.hasNext();) { ???Dept?d = (Dept) iterator.next(); ???map.put(d.getDeptid(), d.getDeptname()); ??} ??return map; ?} ? 6, <select name="" id="seltype" onchange="refreshSelect();"> ????????????<option value=""> ?????????????--選擇方式-- ????????????</option> ????????????<option value="xm"> ?????????????按項目 ????????????</option> ????????????<option value="dept"> ?????????????按部門 ????????????</option> ???????????</select> 7,返回為布爾類型的處理 <script? type="text/javascript"> ??? function showResult(b) {//b為布爾值 ??????? if (b) { ??????????? alert("已經有重復的登錄名了!"); ??????? } else { ??????????? alert("登錄名尚未注冊過!"); ??????? } ??? }function checkRepeat(s) { ??????? var o = document.getElementById(s); ??????? if (o) { ??????????? UserManager.getUser(o.value, showResult);//js不允許重載 ??????? } ??? } ? </script>
<input type="text" name="user" id="user"> <input type="button" onclick="checkRepeat('user')" value="檢查是否重復">
public boolean getUser(String username) { ??? String sql="select count(*) from user where userName=? "; ?int i=getJdbcTemplate().queryForInt(sql,new Object[]{username}); ??? if(i>0) ??? return true; ??????? else ???? return false; }
?
1,查所有的子節點 select? *? from wz_tree???start with?id = 1 connect by prior?id = pid; 2,查所有的父節點??select? *? from wz_tree???start with?id =?256 connect by prior pid = id; ?? 無論正樹還是倒樹, 關鍵就在于connect by的條件. ??
正樹:??必須是??‘父’= prior ‘子’ ??
倒樹:??必須是??‘子’= prior ‘父’ 3,查分類的路徑, 用逗號連接:select? sys_connect_by_path(mc, ',') ? from wz_tree???start with?id = 1 connect by prior?id = pid; http://www.itpub.net/838127.html講的很詳細。 ?? 后注: 查某個節點的全路徑,用上面的辦法是先取得所有節點的全路徑的一個臨時結果集,再從這個臨時結果集里查詢某個節點的全路徑,這種辦法太慢了。正確的做法是先查倒樹的全路徑,再取全路徑最大的那條記錄,這樣做速度飛快。sql如下: ?? select? max(sys_connect_by_path(mc, ',')) ? from wz_tree???start with?id = ? connect by prior pid = id?? 后注:后來發現一棵15000條記錄的樹,查所有節點的全路徑還是非常快的(0.1秒)。 ?? 4,查某個表的字段名: select max(substr(SYS_CONNECT_BY_PATH(COLUMN_NAME, ','), 2)) col ? from (select COLUMN_NAME, column_id ????????? from user_tab_columns ???????? where table_name = '&TEST')--&為plsqldeveloper里的字符串占位符,執行時會彈出對話框讓你填值 ?start with column_id = 1 connect by column_id = rownum; 5,select? *? from wz_tree?where mc like '%五金'??start with?id = 1 connect by prior?id = pid; 和select? *? from wz_tree?start with?id = 1 connect by prior?id = pid?and mc like '%五金'? 二者的查詢結果不一樣.前者正常的先按名稱進行過濾,后者過濾的是樹的分支? 詳見前面的鏈接。 6,ORA-30004: 使用 SYS_CONNECT_BY_PATH 函數時,不能將分隔符作為列值的一部分。 ? 這是因為分隔符在列值里出現了。這個在使用oracle的SYS_CONNECT_BY_PATH函數時是禁止的。所以要把分隔符換掉。 ? 如果出現過以上報錯,換掉分隔符后再次執行含SYS_CONNECT_BY_PATH 函數的sql時可能會報 "ora-00600: 內部錯誤代碼 ,參數:[kokvxsql1],[][],[],..." 。不明白為什么,但重啟oracle就不報錯了。 7,在oracle10g可以利用偽列函數CONNECT_BY_ISLEAF來判斷當前行是不是葉子,如果是葉子就會在偽列中顯示“1”,如果不是葉子而是一個分支就顯示“0” 8, sys_connect_by_path除了用于層次關系,還可以用于行列轉換(借助rownum)。 ? 如把一個表的所有列連成一行,用逗號分隔: select max(substr(sys_connect_by_path(column_name,','),2)) from (select column_name,rownum rn from user_tab_columns where table_name ='DEPT') start with rn=1 connect by rn=rownum ;-------------查得結果為: DEPTNO,DEPTNAME,MGRNO參考: http://ons.javaeye.com/blog/227113
1,css文件里的background里的圖片路徑是相對于該css文件的路徑 2,9pt=12px 3,要移動的對象的style中position屬性一定要指定為absolute或者relative,因為position屬性默認是static,在這種情況下,對象的left和top屬性會被CSS解釋器忽略。 ??????http://www.tkk7.com/yoda/archive/2008/04/16/193461.html
????? 相對定位是"相對于"元素在文檔流中的初始位置,而絕對定位是"相對于"最近的已定位祖先元素,如果不存在已定位的祖先元素,那么是最初的包含塊(可能是html元素)。 ????? http://www.ddcat.net/blog/archives/2006/08/121.html 4, 怎么讓checkbox與文字在同一水平線 ??? 給checkbox定義vertical-align:middle;屬性? 5,跨不同編碼格式的應用傳遞數據時指定編碼方式的處理,見 ??? 在IE下面指定表單編碼方式? ?? 20080512備注:此方法好像不穩定 6,在IE里一個漢字對應2個  ,在firefox卻不一樣,不知道如何兼容。 7,在頁面里寫樣式時,<style type="text/css">里的type必須有,否則不起作用 8,跨瀏覽器的table樣式定義 cellpadding="0" cellspacing="1" bgcolor="#cccccc" #tabid td{//不要定義在tr上,否則不兼容 font-size:12px; padding:2px 3px; text-align:center; vertical-align:middle; background-color: #ffffff; }
#tabid .table_th td{ background-color:#C2E6F5; font-weight:bold; } 9,? 與某QQ號對話,支持IE和Firefox tencent://message/?uin=73035879 10,輕松玩轉花樣表單(轉) ???? 講了各種表單域的屬性說明和樣式控制。例如textarea的wrap能控制是否自動換行,輸入框如何實現信紙效果。 11,IE密碼框里模擬顯示*號 http://bbs.51js.com/thread-72067-1-1.html 12,讓alt和title換行的小技巧 在"&#"后面加值,ASCII碼回車:13,ASCII碼換行:10,只用
就行 13,居中問題 ??? (1)div居中. ??? IE將text-align:center誤解為讓所有東西居中,而不只是文本. ??? 非IE,只需定義div的寬度,然后把水平空白邊設為auto????? margin:0 auto; ?? 把以上兩者都考慮進來,即可以做跨瀏覽器的水平居中. ?? 垂直居中比較麻煩,現在先寫死,以后再考慮如何通用 ??? (2)圖片居中 ???? 現在先把圖片放在一個居中的大小與圖片一樣的div中,通用的方案以后再考慮。 ??? http://topic.csdn.net/u/20070114/20/0718aef7-ce18-490a-9be3-b8f765490c79.html?1700147196 ??? http://www.websbook.com/htmlcssdiv/divzrhstpczjz_14033.html ??? (3)div中的文字垂直居中可以通過設置line-height解決? 14,css如何區分text還是button(IE6不支持樣式選擇器) input { ?border:expression(this.type=="text"?'1px solid #58D3E1':''); } 15,td里如果只有英文不會折斷換行 辦法: <td?style="width:30px;word-wrap:break-word;word-break:break-all;">abcdabcdabcdabcdabcd</td>16, 表單的reset方法,對于select元素有問題,不能復原。 ?自己寫了一個代替默認的reset方法,但沒有考慮checkbox,radio ? function my_reset(){ ??? form1.reset(); ??? jQuery('#sel').val('${obj.sel}'); ??? } 17,iframe如果要設置滾動條,就需要設置寬度或高度。 ?? 訪問iframe里的元素: .contentWindow.document.getElementById('') 18 http://blog.163.com/pcboby@126/blog/static/3120140020085692040249/ http://kazesky.spaces.live.com/blog/cns!FC7C5F854D637274!322.entry
1,firefox對css的解析要求很嚴格,假如css文件里的某個樣式的括號沒有關閉,或者該樣式有問題,那么自這個樣式開始,后面所有的樣式都不認,
而IE除了那個有問題的樣式以外,其他的樣式都能照常解析。 2,firefox的緩存目錄在
C:\Documents and Settings\administrator\Local Settings\Application Data\Mozilla\Firefox\Profiles\rx9e4si8.default\Cache
而不是
C:\Documents and Settings\administrator\Application Data\Mozilla\Firefox\Profiles\rx9e4si8.default
應該要關掉文件隱藏才能看到。 3, 在地址欄里輸入about:config可改配置,下面是各個參數的含義 ?? http://wiki.mozcn.org/index.php/Firefox:aboutconfig_B ?? about:cache可看緩存文件(內存的和物理的) ?? network.http.version可修改http協議的版本 4,歷史菜單里有"顯示全部歷史" 5,FF3可以選中頁面中的文字拖動到google搜索框
6,擴展”(Extensions)和“插件”(Plugins)的區別 “擴展”是Firefox自身的功能,與操作系統無關,而“插件”卻是獨立的程序,在不同平臺下的安裝包也截然不同.另外,使用Portable版本的Firefox用戶也需要注意,只有“擴展”可以Portable,而“插件”則需在每臺機器上都裝一遍. http://hi.baidu.com/xiaowang19/blog/item/c1893251122bb11b367abead.html
7,firefox快捷鍵 “/”鍵快速進行頁面內的文本搜索 Space : Show next screen Alt+D :進入地址欄 ctrl + 1 ... 9 :: 切換到某個tab
ctrl + tab / ctrl + shift + tab :: 循環進入前/后tab
ctrl + w :: 關閉當前tab
ctrl + K :焦點移到google輸入框 ctrl + L :焦點移到地址欄 在地址欄敲alt + enter = 在新tab打開當前url ctrl + g = 執行頁面搜索后,尋找下一個符合條件的文字 ctrl + t = 新增一個tab ctrl + shift + t = 重新打開剛剛關閉的tab,是上一個快捷鍵的反向操作,非常好用 crtl + tab = 向前切換tab crtl + shift + tab = 向后切換tab F11 : 全屏 ctrl+U :查看網頁源代碼 ctrl+enter:在地址欄里敲入test,快捷鍵后變為www.test.com
8,firefox的配置都在C:\Documents and Settings\Administrator\Application Data\Mozilla\Firefox”下,其中“Administrator”就是用戶名,重裝時先將這個目錄下的文件備份
9, 繁體轉換簡體代碼(在地址欄敲入):
javascript:(function(){var%20s=document.getElementById("tongwenlet_cn");if(s!=null){document.body.removeChild(s);}var%20s=document.createElement("script");s.language="javascript";s.type="text/javascript";s.src="http://tongwen.openfoundry.org/NewTongWen/tools/bookmarklet_cn.js";s.id="tongwenlet_cn";document.body.appendChild(s);%20})();
10,清理內存 在地址欄中使用about:config打開FF的配置頁面,右鍵添加一個屬性:名稱為config.trim_on_minimize,值類型為
boolean,值為true,然后將FF關閉之后再打開,這樣該設置就生效了。該屬性的作用是當Firefox最小化之后會自動釋放內容,可以打開任務管理器進行驗證。該方法操作和設置都最簡單。 browser.sessionhistory.max_total_viewers,缺省值是-1,表示開啟了歷史頁面緩存功能,如果要屏蔽它,只需要將該參數設為0 還可以使用SweepRAM http://jetmah.iteye.com/blog/743803
1,firebug 使用說明http://blog.csdn.net/tianxiaode/archive/2007/09/02/1769152.aspx 2, flashgot 3, Cache Status ?? 可在狀態欄查看和清除緩存(包括硬盤和內存上的),"附加軟件"-->"選項"可設置緩存最大值。 4, CacheViewer ?? 排列并允許搜索緩存文件,可與3互相補充。 5, Fasterfox 已棄用6, Better Gmail ?? 還不熟悉 7,Google Toolbar for Firefox ?? 書簽很有用。 8,flashblock ?? 只有點擊后才會加載flash,不點擊只顯示一個占位 https://addons.mozilla.org/zh-CN/firefox/addon/4339,livehttpheaders :類似httpwatch的抓包工具 http://livehttpheaders.mozdev.org/? HttpFox 功能類似,貌似更好用 10,ServerSpy ??? 獲取某網站使用的web服務器類型 11,Leak Monitor https://addons.mozilla.org/zh-CN/firefox/addon/2490 http://www.jb51.net/article/8145.htmLeak Monitor 12, ProxySwitch ??? 瀏覽器代理.另外還有FoxyProxy和switchproxy http://www.proxy-offline-browser.com/ProxySwitch/ 13,File Title 保存網頁時以網頁的title命名 https://addons.mozilla.org/en-US/firefox/addon/834 14, CoLT提供一種很便捷的方式復制網頁上的鏈接,會給寫blog帶來一些方便。 https://addons.mozilla.org/en-US/firefox/addon/1812 15,searchstatus 顯示網站的Alexa排名,對一般人意義不大。 16,FireGestures ?可以讓您通過五個類型的鼠標手勢來執行各種各樣的命令:
* 鼠標手勢 (按住右鍵不放移動鼠標);
* 滾輪手勢 (按住右鍵不放滾動滾輪);
* 搖桿手勢 (按住右鍵不放左擊,反之亦然);
* 按鍵手勢 (按住Ctrl / Shift鍵不放使用鼠標手勢);
* 標簽滾輪手勢 (在標簽欄上滾動滾輪)。 17, Session Manager 可以保存session,還可以記錄多組tab頁 20,YSlow 需要先裝firebug YSlow analyzes web pages and tells you why they're slow based on the rules for high performance web sites. YSlow is a Firefox add-on integrated with the popular Firebug web development tool. YSlow gives you: ??? * Performance report card ??? * HTTP/HTML summary ??? * List of components in the page ??? * Tools including JSLint 21, Firecookie用來管理Cookies. 22,firephp提供給PHP開發者使用,能夠管理PHP函數 23, Jiffy是由Scott Ruthfield 和 Whitepages.com團隊開發的一個細顆粒和靈活的網站性能追蹤,分析套件。 24, RainbowForFirebug brings Javascript syntax highlighting to Firebug. 25, LiveCoder lets you poke at the
browser's DOM, just like Firebug. But LiveCoder also lets you examine
Firebug itself. In addition to examining the DOM, you can alter it
including changing functions. This is a great way to debug your code
and test fixes more quickly. 26, Pixel Perfect is a firebug extension that allows web developers to easily overlay a web composition over top of the developed html.這個能讓一個圖片懸浮在網頁上,并且可以設置透明度和微調坐標。這對某些人來說是好東西。 27,GreaseMonkey ?可以給別人的網站添加自定義代碼 28,IE Tab ?可以在ff中打開ie的tab ?? 29,wmlbrowser 模擬WAP瀏覽查看wml頁面 30,ScrapBook 幫助您保存和整理收藏的網頁資料 31,RefControl 針對每個網站送出想要的 HTTP Referer. Burning注:對于Sina,Sohu,163,百度等BSP的Blog,只有這個才能在 鮮果中順利的看到圖片,不至于讓他們提示“此圖片用來與***溝通” 32,Zotero 文獻管理工具 http://www.snakehsu.info/sigma_c/2007/10/firefox-zotero.html 33,Colorzilla 可以捕獲當前鼠標所指的頁面坐標位置和顏色,以及DOM路徑 34,MeasureIt 在Firefox中畫坐標和度量尺的小插件,用它測量HTML元素的寬高很是方便
35,Simple Mail http://www.hellohuohu.com/2008/01/03/94/ 36,ScribeFire 寫博客的.即以前的Performancing for Firefox http://cajon.cnblogs.com/archive/2006/05/16/401423.html 37, ctrl-Tab 比showcase好用 ?? 可預覽可切換tab,快捷鍵為ctrl+tab 38, Easy DragToGo?? 可以定義拖拽文字鏈接圖片的行為 39,Quick TransLation ?? 翻譯擴展 40,QuickNote ?? 筆記擴展 41,新同文堂 ?? 繁簡轉化 42,Show Location ?? 利用 IP 數據庫,在狀態欄顯示網頁服務器的位置 ?? 說明見http://mozilla.sociz.com/viewthread.php?tid=18118 43,Tamper Data 篡改數據 TamperData is an extension to track and modify http/https requests, - security testing of Web based applications
- tracking request/responses
http://zoukejian.blog.51cto.com/131276/62057 44,UnMHT 另存為mht文件 45, Text Link :雙擊url文本可打開 46,有了firebug,為何還要用web developer 47,Fiddler Switch 在前端開發界,有這么一個說法:Firefox + Firebug + Fiddler,稱之為
3F,拯救了前端的工作。Fiddler是個偉大的工具,默認在IE上工作得挺好,但在Firefox上需要設置代理,有點麻煩,Fiddler
Switch就是Taobao UED空帷達人為了解決此問題而開發的。如果你還沒用過Fiddler,推薦閱讀下這篇文章: 如何直接調試線上頁面的JavaScript和CSSFirefox非主流開發擴展推薦如何直接調試線上頁面的JavaScript和CSS48,autopager 49,codeburner CodeBurner is a Firefox add-on that integrates with Firebug, to extend it with reference material for HTML and CSS. 50,tab counter 51, cssviewer 52,CustomizeGoogle ?is a Firefox extension that enhances Google search
results by adding extra information (like links to Yahoo, Ask.com, MSN
etc) and removing unwanted information (like ads and spam). 53,downthemall 54,google reader watcher 55,google 筆記本 56,image zoom 57,NoScript 58,PDF Download 59,Prism is a simple XULRunner based browser that hosts web applications
without the normal web browser user interface. Prism is based on a
concept called Site Specific Browsers (SSB) 60,reminderfox ?? 顯示和管理備忘和計劃 修改舊擴展以支持ff3.0.1:改xpi為zip,然后把install.rdf 文件拖出,找到 em:maxVersion 標簽,把值改為 3.0.1 ,再放回去,重新改后綴為xpi . http://www.awflasher.com/blog/archives/750 http://www.hualian.net/ http://www.softwareishard.com/blog/firebug/list-of-firebug-extensions/ 實戰 Firefox 擴展開發
1,
同步時報錯,看log:
!ENTRY org.eclipse.core.jobs 4 2 2007-10-12 13:22:35.102
!MESSAGE An internal error occurred during: "Synchronizing CVS".
!STACK 0
java.lang.IllegalArgumentException: Attempted to beginRule: F/mis, does not match outer scope rule: F/mis/images
at org.eclipse.core.runtime.Assert.isLegal(Assert.java:62)
at org.eclipse.core.internal.jobs.ThreadJob.illegalPush(ThreadJob.java:122)
at org.eclipse.core.internal.jobs.ThreadJob.push(ThreadJob.java:232)
找不到原因,重新發布一下就好了。可以把myeclipse的validate禁掉。
注:eclipse的log在工作空間下的.metadata里
1,ctrl+"/"??????? 對單行進行注釋切換
2, ctrl+鼠標?? ? ? 快速滾動
3,myeclips6不能用alt+"/"
?? 解決:在key設置中把word completion的alt+"/"去掉,把content assistant的ctrl+space改為alt+"/"
4, Ctrl+K:將光標停留在變量上,按Ctrl+K鍵可以查找到下一個同樣的變量
5,Shift+Ctrl+K:和Ctrl+K查找的方向相反
6,Shift+Ctrl+X:將所選字符轉為大寫 7,Shift+Ctrl+Y:將所選字符轉為小寫
8,Ctrl+Q:回到最后一次編輯的地方9, Ctrl+Y:重作,作用與ctrl+z相反 10, Ctrl+H:搜索 11,調試時的快捷鍵 ?? inspector --Ctrl+shift+I ?? 下一步? --F6 ?? Resume(綠三角) --F8 12, F3? 跳轉到類、變量的聲明 13,切換編輯窗口??? 原來是ctrl+F6,現在被我改為 Ctrl+Tab,相應的反向操作改為ctrl+shift+tab,當然也可以用上下箭頭進行選擇。 14,Tab 選中多行右移 ??? Shift+Tab 相反 15,ctrl+M? 窗口最大化 16, shift+enter及ctrl+shift+enter? ? Shift+enter在當前行之下創建一個空白行,與光標是否在行末無關。Ctrl+shift+enter則在當前行之前插入空白行。 17, ctrl+.及ctrl+1:下一個錯誤及快速修改???
ctrl+.將光標移動至當前文件中的下一個報錯處或警告處。這組快捷鍵我一般與ctrl+1一并使用,即修改建議的快捷鍵。新版Eclipse的修改建
議做的很不錯,可以幫你解決很多問題,如方法中的缺失參數,throw/catch exception,未執行的方法等等。 18 ctrl+e:快速轉換編輯器19 Ctrl+I縮進功能,但其更加實用之處在于 當你從網頁上復制一些代碼直接粘貼到ME中,代碼前會有很多“紅色浪線”,這是時候用這個快捷鍵可以很快去掉。20? Alt+Shift+S 快速到達“source” ??? (1)直接一個R????? 添加 屬性的 Setter 和 Getter; ??? (2)直接一個C????? 添加 無參構造函數; ??? (3)直接一個O????? 添加 帶參構造函數; 21? Ctrl+`(注意這是個點,在“1“的旁邊) 去掉所有斷點(如果發布Spring項目,加了“斷點”發布可能會遇到問題,所以此快捷鍵很是有用) 22 ?? F5(步入step into),就是單步執行,遇到子函數就進入并且繼續單步執行 ?? F6(步進step over),是在單步執行時,在函數內遇到子函數時不會進入子函數內單步執行,而是將子函數整個執行完再停止,也就是把子函數整個作為一步。 ?? F7(步出step return),就是但單步執行到子函數內時,用step return就可以執行完子函數余下部分,并返回到上一層函數。 ?? F8(resume開始,跳過該斷點) 25,一篇很好的講eclipse調試的文章 在eclipse調試JSP和java程序遠程調試http://www.javaeye.com/topic/633824 更多快捷鍵組合可在Eclipse按下ctrl+shift+L查看。
http://www.tkk7.com/dashi99/archive/2009/06/02/279599.html Netbeans debug:F5(resume開始,跳過該斷點),F6(BUILD CURRENT
PROJECT),F7(步入step into),F8(步進step over)
call Hierarchy (alt+shift+F12).
var x=document.getElementById('myTable').rows;
var y=x[0].cells;
y[0].innerHTML="NEW CONTENT";
var x=document.getElementById('myTable').insertRow(2);
var y=x.insertCell(0);
var z=x.insertCell(1);
y.innerHTML="NEW CELL1";
z.innerHTML="NEW CELL2";
見www.java2s.com
|