MDA/MDD/TDD/DDD/DDDDDDD
posts - 536, comments - 111, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

来自: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方案的,忙活这个接口没意义呀。


posted @ 2007-11-21 22:44 leekiang 阅读(2431) | 评论 (2)编辑 收藏

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

posted @ 2007-11-14 22:04 leekiang 阅读(3945) | 评论 (0)编辑 收藏

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" "http://getahead.org/dwr/dwr20.dtd">
<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;
}


 

posted @ 2007-11-12 22:32 leekiang 阅读(940) | 评论 (0)编辑 收藏

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



posted @ 2007-10-31 21:13 leekiang 阅读(1818) | 评论 (0)编辑 收藏

1,css文件里的background里的图片路径是相对于该css文件的路径
2,9pt=12px
3,要移动的对象的style中position属性一定要指定为absolute或者relative,因为position属性默认是static,在这种情况下,对象的left和top属性会被CSS解释器忽略。
      http://www.blogjava.net/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个&nbsp ,在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,只用&#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

posted @ 2007-10-30 13:44 leekiang 阅读(423) | 评论 (0)编辑 收藏

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

posted @ 2007-10-23 23:21 leekiang 阅读(285) | 评论 (0)编辑 收藏

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/433
9,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和CSS
Firefox非主流开发扩展推荐
如何直接调试线上页面的JavaScript和CSS

48,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 扩展开发

posted @ 2007-10-23 22:50 leekiang 阅读(882) | 评论 (0)编辑 收藏

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里


posted @ 2007-10-22 20:46 leekiang 阅读(1035) | 评论 (0)编辑 收藏

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.blogjava.net/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).


posted @ 2007-10-21 16:43 leekiang 阅读(1015) | 评论 (0)编辑 收藏

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

posted @ 2007-10-19 16:28 leekiang 阅读(2028) | 评论 (3)编辑 收藏

仅列出标题
共54页: First 上一页 44 45 46 47 48 49 50 51 52 下一页 Last