<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Java堂</title>
	<atom:link href="http://www.javatang.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.javatang.com</link>
	<description>Java Tang</description>
	<lastBuildDate>Thu, 02 Sep 2010 03:43:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>给Spring Security中的j_spring_security_check等改名</title>
		<link>http://www.javatang.com/archives/2010/09/02/4325457.html</link>
		<comments>http://www.javatang.com/archives/2010/09/02/4325457.html#comments</comments>
		<pubDate>Thu, 02 Sep 2010 03:43:25 +0000</pubDate>
		<dc:creator>Jet</dc:creator>
				<category><![CDATA[JavaPlateform]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[spring security]]></category>

		<guid isPermaLink="false">http://www.javatang.com/?p=457</guid>
		<description><![CDATA[默认情况下，Spring Security（SS）的登录验证提交的Servlet默认名称为j_spring_security_check，但是很多情况下想将这个名称修改掉，后来终于在Spring的官方论坛上找到了一个哥们儿提出的类似的问题（见参考资料），原来只要修改&#60;form-login&#62;节点login-processing-url属性就可以了，其他的一些设置可以参考官方的文档：B.1.5 The &#60;form-login&#62; Element。 对于SS的使用及配置文件的含义可以参考这篇文章：spring-security3 配置和使用，总结的非常到位了。 参考资料： Rename j_spring_security_check to j_security_check Related Posts:SimpleJdbcInsert使用executeAndReturnKeyHolder方法返回主键时需要注意的一个地方PHP常见问题及解答ExtJS中TextField或TextArea支持按键事件的条件ExtJS中调用focus方法无效的解决方法Spring+Velocity中模板路径的问题]]></description>
			<content:encoded><![CDATA[<p>默认情况下，Spring Security（SS）的登录验证提交的Servlet默认名称为j_spring_security_check，但是很多情况下想将这个名称修改掉，后来终于在Spring的官方论坛上找到了一个哥们儿提出的类似的问题（见参考资料），原来只要修改&lt;form-login&gt;节点login-processing-url属性就可以了，其他的一些设置可以参考官方的文档：<a href="http://static.springsource.org/spring-security/site/docs/3.0.x/reference/appendix-namespace.html#nsa-form-login" target="_blank">B.1.5 The &lt;form-login&gt; Element</a>。</p>
<p>对于SS的使用及配置文件的含义可以参考这篇文章：<a href="http://www.javaeye.com/topic/696645" target="_blank">spring-security3 配置和使用</a>，总结的非常到位了。</p>
<p>参考资料：<br />
<a href="http://forum.springsource.org/showthread.php?t=89286" target="_blank">Rename j_spring_security_check to j_security_check</a></p>
<div id="crp_related"><h2>Related Posts:</h2><ul><li><a href="http://www.javatang.com/archives/2010/08/09/3212438.html" rel="bookmark" class="crp_title">SimpleJdbcInsert使用executeAndReturnKeyHolder方法返回主键时需要注意的一个地方</a></li><li><a href="http://www.javatang.com/archives/2007/06/08/5540166.html" rel="bookmark" class="crp_title">PHP常见问题及解答</a></li><li><a href="http://www.javatang.com/archives/2010/07/07/5638409.html" rel="bookmark" class="crp_title">ExtJS中TextField或TextArea支持按键事件的条件</a></li><li><a href="http://www.javatang.com/archives/2010/07/08/4916413.html" rel="bookmark" class="crp_title">ExtJS中调用focus方法无效的解决方法</a></li><li><a href="http://www.javatang.com/archives/2008/06/26/5407270.html" rel="bookmark" class="crp_title">Spring+Velocity中模板路径的问题</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.javatang.com/archives/2010/09/02/4325457.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache和Resin组合时UrlRewriteFilter失效的解决方法</title>
		<link>http://www.javatang.com/archives/2010/08/27/3629451.html</link>
		<comments>http://www.javatang.com/archives/2010/08/27/3629451.html#comments</comments>
		<pubDate>Fri, 27 Aug 2010 09:36:29 +0000</pubDate>
		<dc:creator>Jet</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[Web&Server]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[resin]]></category>

		<guid isPermaLink="false">http://www.javatang.com/?p=451</guid>
		<description><![CDATA[目前在Spring3.0的官方example中都使用UrlRewriteFilter来做伪静态，单独运行在Resin等JavaEE Web容器中的时候一切都OK，但是一旦与Apache一起组合的时候总是会出现404或403错误，当然UrlRewriteFilter所设定的规则也无效。 造成这种现象的原因是因为在默认情况下，静态的资源均由Apache进行处理，而jsp或者由web.xml所映射的servlet均交给resin进行处理。如果web项目没有使用UrlRewriteFilter则一切OK，但是使用了UrlRewriteFilter之后，由servlet所映射的地址并不是/*即所有资源了，而是类似/app/*这样的设置。也就是说，用户所请求的资源首先由Apache判断一下，然后再由选择的交给Resin，最后才执行UrlRewriteFilter的规则。 知道了原因，解决的方法也就出来了，只要告诉Apache将所有的资源都交由Resin来处理就可以了，可以使用Resin的servlet-mapping方法进行配置，配置如下： &#60;servlet-mapping url-pattern='/*' servlet-name='plugin_match'/&#62; 其中plugin_match是Resin内置的servlet，按照resin官方的解释就是Resin告诉Apache将所有的符合url-pattern规则要求的请求都发送给它进行处理。 因为servlet-mapping是resin特有的，所以建议将此也放在resin-web.xml中，然后放在项目中的WEB-INF目录下： &#60;web-app xmlns=&#34;http://caucho.com/ns/resin&#34; &#160; &#160; &#160; &#160;&#160; xmlns:resin=&#34;http://caucho.com/ns/resin/core&#34;&#62; &#160; &#160; &#60;servlet-mapping&#160;url-pattern='/*' servlet-name='plugin_match'/&#62; &#60;/web-app&#62; 参考资料： Apache的UrlRewrite和Resin的配置问题 Resin官方对servlet-mapping的说明 Related Posts:Resin 3.0.x 经验总结Apache+Resin下如何写伪静态和301跳转DWR文档之开始使用 DWR如何使用DWR2.0的注解功能Apache和Resin产生大容量日志的解决办法]]></description>
			<content:encoded><![CDATA[<p>目前在Spring3.0的官方example中都使用UrlRewriteFilter来做伪静态，单独运行在Resin等JavaEE Web容器中的时候一切都OK，但是一旦与Apache一起组合的时候总是会出现404或403错误，当然UrlRewriteFilter所设定的规则也无效。</p>
<p>造成这种现象的原因是因为在默认情况下，静态的资源均由Apache进行处理，而jsp或者由web.xml所映射的servlet均交给resin进行处理。如果web项目没有使用UrlRewriteFilter则一切OK，但是使用了UrlRewriteFilter之后，由servlet所映射的地址并不是/*即所有资源了，而是类似/app/*这样的设置。也就是说，用户所请求的资源首先由Apache判断一下，然后再由选择的交给Resin，最后才执行UrlRewriteFilter的规则。</p>
<p>知道了原因，解决的方法也就出来了，只要告诉Apache将所有的资源都交由Resin来处理就可以了，可以使用Resin的servlet-mapping方法进行配置，配置如下：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">&lt;</span><span style="color: Green;">servlet-mapping</span><span style="color: Gray;"> </span><span style="color: #00008b;">url-pattern</span><span style="color: Gray;">='/*' </span><span style="color: #00008b;">servlet-name</span><span style="color: Gray;">='</span><span style="color: #00008b;">plugin_match</span><span style="color: Gray;">'</span><span style="color: Olive;">/&gt;</span></li></ol></div>
<p>其中plugin_match是Resin内置的servlet，按照resin官方的解释就是Resin告诉Apache将所有的符合url-pattern规则要求的请求都发送给它进行处理。</p>
<p>因为servlet-mapping是resin特有的，所以建议将此也放在resin-web.xml中，然后放在项目中的WEB-INF目录下：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">&lt;</span><span style="color: Green;">web-app</span><span style="color: Gray;"> </span><span style="color: #00008b;">xmlns</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">http://caucho.com/ns/resin</span><span style="color: #8b0000;">&quot;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; </span><span style="color: #00008b;">xmlns:resin</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">http://caucho.com/ns/resin/core</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">servlet-mapping</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">url-pattern</span><span style="color: Gray;">='/*' </span><span style="color: #00008b;">servlet-name</span><span style="color: Gray;">='</span><span style="color: #00008b;">plugin_match</span><span style="color: Gray;">'</span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Olive;">&lt;/</span><span style="color: Green;">web-app</span><span style="color: Olive;">&gt;</span></li></ol></div>
<p>参考资料：<br />
<a href="http://highbird.blog.sohu.com/70318160.html" target="_blank">Apache的UrlRewrite和Resin的配置问题</a><br />
<a href="http://www.caucho.com/resin-3.0/config/webapp.xtp#servlet-mapping" target="_blank">Resin官方对servlet-mapping的说明</a></p>
<div id="crp_related"><h2>Related Posts:</h2><ul><li><a href="http://www.javatang.com/archives/2006/08/21/010658.html" rel="bookmark" class="crp_title">Resin 3.0.x 经验总结</a></li><li><a href="http://www.javatang.com/archives/2008/10/18/1942276.html" rel="bookmark" class="crp_title">Apache+Resin下如何写伪静态和301跳转</a></li><li><a href="http://www.javatang.com/archives/2006/10/20/254879.html" rel="bookmark" class="crp_title">DWR文档之开始使用 DWR</a></li><li><a href="http://www.javatang.com/archives/2008/07/07/5648271.html" rel="bookmark" class="crp_title">如何使用DWR2.0的注解功能</a></li><li><a href="http://www.javatang.com/archives/2007/06/20/1513177.html" rel="bookmark" class="crp_title">Apache和Resin产生大容量日志的解决办法</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.javatang.com/archives/2010/08/27/3629451.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>解决Firefox及Firebug内存泄漏的问题</title>
		<link>http://www.javatang.com/archives/2010/08/21/0946448.html</link>
		<comments>http://www.javatang.com/archives/2010/08/21/0946448.html#comments</comments>
		<pubDate>Sat, 21 Aug 2010 02:09:46 +0000</pubDate>
		<dc:creator>Jet</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[Web&Server]]></category>

		<guid isPermaLink="false">http://www.javatang.com/?p=448</guid>
		<description><![CDATA[Firebug现在基本是调试Javascript脚本必备的工具，但是由于Firefox运行机制的原因，通常在使用一段时间之后会发现Firefox变得非常慢，在任务管理器中也会发现firefox.exe进程占用了不小的内容。 这里综合自己使用的情况强烈推荐三种方式，可以根据自己的喜好进行选择： 1. 进行系统设置 在地址栏中使用about:config打开FF的配置页面，右键添加一个属性：名称为config.trim_on_minimize，值类型为boolean，值为true，然后将FF关闭之后再打开，这样该设置就生效了。该属性的作用是当Firefox最小化之后会自动释放内容，可以打开任务管理器进行验证。该方法操作和设置都最简单。 2. 使用RAMBack扩展 FF中有一个非常不错的自动释放内存的扩展：RAMBack，这个扩展的基本原理也是上述第一条中的方法，只不过使用插件的方式将这个动作进行自动操作了，安装好扩展并重启FF就可以了，操作更方便。 这里顺便在推荐一个不错的扩展：StatusbarEx，该扩展是用来监视FF内存使用情况的，另外还可以监视系统内存的使用情况、CPU的使用率、FF CPU的使用率等等。 3. 使用SweepRAM软件 确切地来说，SweepRAM并非专门用来释放FF内存的，而是释放系统中所有未被使用但驻留在内存中的数据，据我的使用来看，他对javaw的释放效果也很明显，如果使用Eclipse或NetBeans等做开发的朋友可以试一试。 这个软件是使用VB开发的，所以通常需要在上面的网站上下载vb6fr.dll，然后拷贝到 %SystemRoot%\system32 目录下，另外默认执行SweepRAM.exe完成后会出现一个done的对话框，可以在后面加上 /s 参数禁止显示该对话框。我是在快速启动栏里面创建了一个快捷方式，使用的时候直接点一下，非常方便。 参考资料： SweepRAM – Firefox3 内存释放工具 Related Posts:C++基础之字符串处理函数PHP中出现“Unable to load dynamic library”问题的解决方法2007年邮政贺卡开奖功能强大的在线编辑器-FCKeditor今天看到一句话，很是喜欢]]></description>
			<content:encoded><![CDATA[<p>Firebug现在基本是调试Javascript脚本必备的工具，但是由于Firefox运行机制的原因，通常在使用一段时间之后会发现Firefox变得非常慢，在任务管理器中也会发现firefox.exe进程占用了不小的内容。</p>
<p>这里综合自己使用的情况强烈推荐三种方式，可以根据自己的喜好进行选择：</p>
<p><strong>1. 进行系统设置</strong><br />
在地址栏中使用about:config打开FF的配置页面，右键添加一个属性：名称为config.trim_on_minimize，值类型为boolean，值为true，然后将FF关闭之后再打开，这样该设置就生效了。该属性的作用是当Firefox最小化之后会自动释放内容，可以打开任务管理器进行验证。该方法操作和设置都最简单。</p>
<p><strong>2. 使用RAMBack扩展</strong><br />
FF中有一个非常不错的自动释放内存的扩展：<a href="https://addons.mozilla.org/zh-CN/firefox/addon/5972/" target="_blank">RAMBack</a>，这个扩展的基本原理也是上述第一条中的方法，只不过使用插件的方式将这个动作进行自动操作了，安装好扩展并重启FF就可以了，操作更方便。</p>
<p>这里顺便在推荐一个不错的扩展：<a href="https://addons.mozilla.org/en-US/firefox/addon/3271/" target="_blank">StatusbarEx</a>，该扩展是用来监视FF内存使用情况的，另外还可以监视系统内存的使用情况、CPU的使用率、FF CPU的使用率等等。</p>
<p><strong>3. 使用SweepRAM软件</strong><br />
确切地来说，<a href="http://88.191.26.34/computers_are_fun/sweepram/" target="_blank">SweepRAM</a>并非专门用来释放FF内存的，而是释放系统中所有未被使用但驻留在内存中的数据，据我的使用来看，他对javaw的释放效果也很明显，如果使用Eclipse或NetBeans等做开发的朋友可以试一试。</p>
<p>这个软件是使用VB开发的，所以通常需要在上面的网站上下载vb6fr.dll，然后拷贝到 %SystemRoot%\system32 目录下，另外默认执行SweepRAM.exe完成后会出现一个done的对话框，可以在后面加上 /s 参数禁止显示该对话框。我是在快速启动栏里面创建了一个快捷方式，使用的时候直接点一下，非常方便。</p>
<p>参考资料：<br />
<a href="http://www.appinn.com/sweepram/" target="_blank">SweepRAM – Firefox3 内存释放工具</a></p>
<div id="crp_related"><h2>Related Posts:</h2><ul><li><a href="http://www.javatang.com/archives/2007/10/30/2016233.html" rel="bookmark" class="crp_title">C++基础之字符串处理函数</a></li><li><a href="http://www.javatang.com/archives/2007/07/04/1548182.html" rel="bookmark" class="crp_title">PHP中出现“Unable to load dynamic library”问题的解决方法</a></li><li><a href="http://www.javatang.com/archives/2007/03/05/3646109.html" rel="bookmark" class="crp_title">2007年邮政贺卡开奖</a></li><li><a href="http://www.javatang.com/archives/2007/03/16/4052133.html" rel="bookmark" class="crp_title">功能强大的在线编辑器-FCKeditor</a></li><li><a href="http://www.javatang.com/archives/2006/10/18/570575.html" rel="bookmark" class="crp_title">今天看到一句话，很是喜欢</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.javatang.com/archives/2010/08/21/0946448.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SimpleJdbcInsert使用executeAndReturnKeyHolder方法返回主键时需要注意的一个地方</title>
		<link>http://www.javatang.com/archives/2010/08/09/3212438.html</link>
		<comments>http://www.javatang.com/archives/2010/08/09/3212438.html#comments</comments>
		<pubDate>Mon, 09 Aug 2010 05:32:12 +0000</pubDate>
		<dc:creator>Jet</dc:creator>
				<category><![CDATA[JavaPlateform]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://www.javatang.com/?p=438</guid>
		<description><![CDATA[Spring的SimpleJdbcInsert发挥了Simple风格，与SimpleJdbcTemplate同属于Simple体系。该类为向数据库中插入数据提供了一个非常快捷的方式，另外它还提供了一套用于返回插入数据的主键的方法：executeAndReturnKeyHolder、executeAndReturnKey。 查看API的时候可以看到executeAndReturnKey这个方法的返回类型是Number类型，当时我就再想如果主键的类型是String类型呢，比如UUID。后来看到还有一个executeAndReturnKeyHolder方法，返回的是一个KeyHolder对象，可以通过keyHolder#getKeys()获取主键的值，另外还有一个getKeyList()方法用于复合主键的情况，这里先撇开不说。 看完API之后那就可以动手了，代码如下： // jdbcInsert是SimpleJdbcInsert对象 Map&#60;String, Object&#62; data = Maps.newHashMap(); data.put(&#34;id&#34;, &#34;t0001&#34;); data.put(&#34;name&#34;, &#34;Tom&#34;); data.put(&#34;age&#34;, 24); KeyHolder&#160;keyHolder = jdbcInsert.withTableName(&#34;t_tablename&#34;) &#160; &#160; &#160; &#160; .usingColumns(&#34;id&#34;, &#34;name&#34;, &#34;age&#34;) &#160; &#160; &#160; &#160; .usingGeneratedKeyColumns(&#34;id&#34;) &#160; &#160; &#160; &#160; .executeAndReturnKeyHolder(data); // 下面主要是对keyHoder进行分析 if(keyHolder == null)&#160;{ &#160; &#160; return&#160;null; } Map&#60;String, Object&#62; keys = keyHolder.getKeys(); if(keys == null &#124;&#124; keys.size() [...]]]></description>
			<content:encoded><![CDATA[<p>Spring的<a href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/jdbc/core/simple/SimpleJdbcInsert.html" target="_blank">SimpleJdbcInsert</a>发挥了Simple风格，与<a href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/jdbc/core/simple/SimpleJdbcTemplate.html" target="_blank">SimpleJdbcTemplate</a>同属于Simple体系。该类为向数据库中插入数据提供了一个非常快捷的方式，另外它还提供了一套用于返回插入数据的主键的方法：executeAndReturnKeyHolder、executeAndReturnKey。</p>
<p>查看API的时候可以看到<a href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/jdbc/core/simple/SimpleJdbcInsert.html#executeAndReturnKey(java.util.Map)" target="_blank">executeAndReturnKey</a>这个方法的返回类型是Number类型，当时我就再想如果主键的类型是String类型呢，比如UUID。后来看到还有一个executeAndReturnKeyHolder方法，返回的是一个<a href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/jdbc/support/KeyHolder.html" target="_blank">KeyHolder</a>对象，可以通过keyHolder#getKeys()获取主键的值，另外还有一个getKeyList()方法用于复合主键的情况，这里先撇开不说。</p>
<p>看完API之后那就可以动手了，代码如下：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">// jdbcInsert是SimpleJdbcInsert对象</span></li>
<li><span style="color: Blue;">Map</span><span style="color: Gray;">&lt;</span><span style="color: Blue;">String</span><span style="color: Gray;">, </span><span style="color: Blue;">Object</span><span style="color: Gray;">&gt; </span><span style="color: Blue;">data</span><span style="color: Gray;"> = </span><span style="color: Blue;">Maps</span><span style="color: Gray;">.</span><span style="color: Blue;">newHashMap</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Blue;">data</span><span style="color: Gray;">.</span><span style="color: Blue;">put</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">id</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">t0001</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Blue;">data</span><span style="color: Gray;">.</span><span style="color: Blue;">put</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">name</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">Tom</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Blue;">data</span><span style="color: Gray;">.</span><span style="color: Blue;">put</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">age</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: Maroon;">24</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Blue;">KeyHolder</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">keyHolder</span><span style="color: Gray;"> = </span><span style="color: Blue;">jdbcInsert</span><span style="color: Gray;">.</span><span style="color: Blue;">withTableName</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">t_tablename</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; .</span><span style="color: Blue;">usingColumns</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">id</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">name</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">age</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; .</span><span style="color: Blue;">usingGeneratedKeyColumns</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">id</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; .</span><span style="color: Blue;">executeAndReturnKeyHolder</span><span style="color: Olive;">(</span><span style="color: Blue;">data</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: #ffa500;">// 下面主要是对keyHoder进行分析</span></li>
<li><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Blue;">keyHolder</span><span style="color: Gray;"> == </span><span style="color: Green;">null</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">null</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li>
<li><span style="color: Blue;">Map</span><span style="color: Gray;">&lt;</span><span style="color: Blue;">String</span><span style="color: Gray;">, </span><span style="color: Blue;">Object</span><span style="color: Gray;">&gt; </span><span style="color: Blue;">keys</span><span style="color: Gray;"> = </span><span style="color: Blue;">keyHolder</span><span style="color: Gray;">.</span><span style="color: Blue;">getKeys</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Blue;">keys</span><span style="color: Gray;"> == </span><span style="color: Green;">null</span><span style="color: Gray;"> || </span><span style="color: Blue;">keys</span><span style="color: Gray;">.</span><span style="color: Blue;">size</span><span style="color: Olive;">()</span><span style="color: Gray;"> == </span><span style="color: Maroon;">0</span><span style="color: Gray;"> || </span><span style="color: Blue;">keys</span><span style="color: Gray;">.</span><span style="color: Blue;">values</span><span style="color: Olive;">()</span><span style="color: Gray;">.</span><span style="color: Blue;">size</span><span style="color: Olive;">()</span><span style="color: Gray;"> == </span><span style="color: Maroon;">0</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">null</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li>
<li><span style="color: Blue;">Object</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">key</span><span style="color: Gray;"> = </span><span style="color: Blue;">keys</span><span style="color: Gray;">.</span><span style="color: Blue;">values</span><span style="color: Olive;">()</span><span style="color: Gray;">.</span><span style="color: Blue;">toArray</span><span style="color: Olive;">()[</span><span style="color: Maroon;">0</span><span style="color: Olive;">]</span><span style="color: Gray;">;</span></li>
<li><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Blue;">key</span><span style="color: Gray;"> == </span><span style="color: Green;">null</span><span style="color: Gray;"> || !</span><span style="color: Olive;">(</span><span style="color: Blue;">key</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">instanceof</span><span style="color: Gray;"> </span><span style="color: Blue;">Serializable</span><span style="color: Olive;">))</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">null</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li>
<li><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Blue;">key</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">instanceof</span><span style="color: Gray;"> </span><span style="color: Blue;">Number</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">Long</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">k</span><span style="color: Gray;"> = </span><span style="color: Olive;">(</span><span style="color: Blue;">Long</span><span style="color: Olive;">)</span><span style="color: Blue;">key</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Blue;">idType</span><span style="color: Gray;"> == </span><span class="hl-types">int</span><span style="color: Gray;">.</span><span style="color: Green;">class</span><span style="color: Gray;"> || </span><span style="color: Blue;">idType</span><span style="color: Gray;"> == </span><span style="color: Blue;">Integer</span><span style="color: Gray;">.</span><span style="color: Green;">class</span><span style="color: Olive;">)</span><span style="color: Gray;"> ? </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">k</span><span style="color: Gray;">.</span><span style="color: Blue;">intValue</span><span style="color: Olive;">()</span><span style="color: Gray;"> : </span><span style="color: Blue;">k</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">else</span><span style="color: Gray;"> </span><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Blue;">key</span><span style="color: Gray;"> </span><span style="color: Green;">instanceof</span><span style="color: Gray;"> </span><span style="color: Blue;">String</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Blue;">String</span><span style="color: Olive;">)</span><span style="color: Blue;">key</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">else</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Blue;">Serializable</span><span style="color: Olive;">)</span><span style="color: Blue;">key</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span><span style="color: Gray;">&nbsp;</span><span style="color: #ffa500;">// end of if(key instanceof Number)</span></li></ol></div>
<p>如果主键id的类型是int或long上面的代码没有任何问题，但是如果是自定义的UUID等String类型则问题出现了，提示下面的错误：</p>
<blockquote><p>
org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL []; SQL state [HY000]; error code [1364]; Field &#8216;id&#8217; doesn&#8217;t have a default value; nested exception is java.sql.SQLException: Field &#8216;id&#8217; doesn&#8217;t have a default value
</p></blockquote>
<p>有些奇怪了吧？明明id的值已经传入了，但是错误的提示应该是没有传入id的值。进入到Spring的源代码中，发现代码里面有一些debug信息，于是在log4j中将debug打开：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline">log4j.logger.org.springframework.jdbc.core=debug</li></ol></div>
<p>从打印出来的信息中看，Spring自动生成的Insert语句中竟然没有id字段！！！继续最终源代码，先在org.springframework.jdbc.core.simple.AbstractJdbcInsert类中找到protected void compileInternal()方法，在代码前加上一个debug信息：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">protected</span><span style="color: Gray;"> </span><span class="hl-types">void</span><span style="color: Gray;"> </span><span style="color: Blue;">compileInternal</span><span style="color: Olive;">()</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">logger</span><span style="color: Gray;">.</span><span style="color: Blue;">debug</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">getGeneratedKeyNames: </span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> + </span><span style="color: Blue;">getColumnNames</span><span style="color: Olive;">())</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">tableMetaDataContext</span><span style="color: Gray;">.</span><span style="color: Blue;">processMetaData</span><span style="color: Olive;">(</span><span style="color: Blue;">getJdbcTemplate</span><span style="color: Olive;">()</span><span style="color: Gray;">.</span><span style="color: Blue;">getDataSource</span><span style="color: Olive;">()</span><span style="color: Gray;">, </span><span style="color: Blue;">getColumnNames</span><span style="color: Olive;">()</span><span style="color: Gray;">, </span><span style="color: Blue;">getGeneratedKeyNames</span><span style="color: Olive;">())</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; ...</span></li>
<li><span style="color: Olive;">}</span></li></ol></div>
<p>这个时候打印的列表中有id字段，继续最终，最后终于在<a href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/jdbc/core/metadata/TableMetaDataContext.html#createInsertString(java.lang.String[])" target="_blank">TableMetaDataContext#createInsertString(java.lang.String[])</a>方法里面找到，关键的代码片段如下：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">for</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Blue;">String</span><span style="color: Gray;"> </span><span style="color: Blue;">columnName</span><span style="color: Gray;"> : </span><span style="color: Green;">this</span><span style="color: Gray;">.</span><span style="color: Blue;">getTableColumns</span><span style="color: Olive;">())</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// 这里将SimpleJdbcInsert#usingGeneratedKeyColumns方法中所设置的字段去除了</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Gray;">!</span><span style="color: Blue;">keys</span><span style="color: Gray;">.</span><span style="color: Blue;">contains</span><span style="color: Olive;">(</span><span style="color: Blue;">columnName</span><span style="color: Gray;">.</span><span style="color: Blue;">toUpperCase</span><span style="color: Olive;">()))</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">columnCount</span><span style="color: Gray;">++;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Blue;">columnCount</span><span style="color: Gray;"> &gt; </span><span style="color: Maroon;">1</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">insertStatement</span><span style="color: Gray;">.</span><span style="color: Blue;">append</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">, </span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">insertStatement</span><span style="color: Gray;">.</span><span style="color: Blue;">append</span><span style="color: Olive;">(</span><span style="color: Blue;">columnName</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li></ol></div>
<p>看到这里，我也猛然恍然大悟了。既然在INSERT INTO语句中设置了UUID的值，那这里就不需要再使用KeyHolder进行返回了，直接获取就是了。这也是为什么KeyHolder中的getKey()方法的返回类型是Number的原因了，因为通常来说需要Spring返回的就是插入数据库中的自增类型的主键值。</p>
<div id="crp_related"><h2>Related Posts:</h2><ul><li><a href="http://www.javatang.com/archives/2006/06/13/242443.html" rel="bookmark" class="crp_title">Oracle中的”值和null以及java中的null区别</a></li><li><a href="http://www.javatang.com/archives/2006/08/30/285461.html" rel="bookmark" class="crp_title">使用java.util.zip对字符串进行压缩和解压缩</a></li><li><a href="http://www.javatang.com/archives/2007/03/13/5026128.html" rel="bookmark" class="crp_title">按照指定的类型排序</a></li><li><a href="http://www.javatang.com/archives/2006/06/27/512049.html" rel="bookmark" class="crp_title">一个理解“单例模式”最好的例子</a></li><li><a href="http://www.javatang.com/archives/2008/06/19/0308269.html" rel="bookmark" class="crp_title">JPA和Hibernate注解的继承问题</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.javatang.com/archives/2010/08/09/3212438.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>common-configuration中CompositeConfiguration类的一个需要注意的地方</title>
		<link>http://www.javatang.com/archives/2010/07/29/0513435.html</link>
		<comments>http://www.javatang.com/archives/2010/07/29/0513435.html#comments</comments>
		<pubDate>Thu, 29 Jul 2010 08:05:13 +0000</pubDate>
		<dc:creator>Jet</dc:creator>
				<category><![CDATA[JavaPlateform]]></category>
		<category><![CDATA[Configuration]]></category>

		<guid isPermaLink="false">http://www.javatang.com/?p=435</guid>
		<description><![CDATA[在Common-Configuration中，CompositeConfiguration类用来对多个配置文件进行组合处理，该类有一个getNumberOfConfigurations()方法，用来读取Configuration对象的个数，但是如果执行下面的代码： CompositeConfiguration config = new CompositeConfiguration(); int number = config.getNumberOfConfigurations(); System.out.println(number); 这个时候会发现number的值是1而不是0，虽然没有向其中添加任何Configuration对象。CompositeConfiguration构造方法的代码如下： public CompositeConfiguration() &#160; &#160; { &#160; &#160; &#160; &#160; clear(); &#160; &#160; } &#160; &#160; &#160; public&#160;void clear() &#160; &#160; { &#160; &#160; &#160; &#160; configList.clear(); &#160; &#160; &#160; &#160; // recreate the in memory configuration &#160; &#160; &#160; &#160; inMemoryConfiguration = new&#160;BaseConfiguration(); [...]]]></description>
			<content:encoded><![CDATA[<p>在<a href="http://commons.apache.org/configuration/" target="_blank">Common-Configuration</a>中，CompositeConfiguration类用来对多个配置文件进行组合处理，该类有一个getNumberOfConfigurations()方法，用来读取Configuration对象的个数，但是如果执行下面的代码：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">CompositeConfiguration</span><span style="color: Gray;"> </span><span style="color: Blue;">config</span><span style="color: Gray;"> = </span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Blue;">CompositeConfiguration</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span class="hl-types">int</span><span style="color: Gray;"> </span><span style="color: Blue;">number</span><span style="color: Gray;"> = </span><span style="color: Blue;">config</span><span style="color: Gray;">.</span><span style="color: Blue;">getNumberOfConfigurations</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Blue;">System</span><span style="color: Gray;">.</span><span style="color: Blue;">out</span><span style="color: Gray;">.</span><span style="color: Blue;">println</span><span style="color: Olive;">(</span><span style="color: Blue;">number</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<p>这个时候会发现number的值是1而不是0，虽然没有向其中添加任何Configuration对象。CompositeConfiguration构造方法的代码如下：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">public</span><span style="color: Gray;"> </span><span style="color: Blue;">CompositeConfiguration</span><span style="color: Olive;">()</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">clear</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">public</span><span style="color: Gray;">&nbsp;</span><span class="hl-types">void</span><span style="color: Gray;"> </span><span style="color: Blue;">clear</span><span style="color: Olive;">()</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">configList</span><span style="color: Gray;">.</span><span style="color: Blue;">clear</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// recreate the in memory configuration</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">inMemoryConfiguration</span><span style="color: Gray;"> = </span><span style="color: Green;">new</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">BaseConfiguration</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">((</span><span style="color: Blue;">BaseConfiguration</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">inMemoryConfiguration</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">setThrowExceptionOnMissing</span><span style="color: Olive;">(</span><span style="color: Blue;">isThrowExceptionOnMissing</span><span style="color: Olive;">())</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">((</span><span style="color: Blue;">BaseConfiguration</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">inMemoryConfiguration</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">setListDelimiter</span><span style="color: Olive;">(</span><span style="color: Blue;">getListDelimiter</span><span style="color: Olive;">())</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">((</span><span style="color: Blue;">BaseConfiguration</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">inMemoryConfiguration</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">setDelimiterParsingDisabled</span><span style="color: Olive;">(</span><span style="color: Blue;">isDelimiterParsingDisabled</span><span style="color: Olive;">())</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">configList</span><span style="color: Gray;">.</span><span style="color: Blue;">add</span><span style="color: Olive;">(</span><span style="color: Blue;">inMemoryConfiguration</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li></ol></div>
<p>可以看到默认构造方法中调用了clear()方法，而clear方法中自动添加了一个BaseConfiguration对象，该对象用于存放自身的一些配置信息。所以这个时候的数量是1而不是0，这一点容易让人迷惑。</p>
<p>参考资料：<br />
<a href="http://permalink.gmane.org/gmane.comp.jakarta.commons.user/10923" target="_blank">Re: [Configuration] CompositeConfiguration.getNumberOfConfigurations( ) question</a></p>
<div id="crp_related"><h2>Related Posts:</h2><ul><li><a href="http://www.javatang.com/archives/2007/03/05/5722110.html" rel="bookmark" class="crp_title">Java中文排序</a></li><li><a href="http://www.javatang.com/archives/2008/06/19/0308269.html" rel="bookmark" class="crp_title">JPA和Hibernate注解的继承问题</a></li><li><a href="http://www.javatang.com/archives/2006/03/09/37292.html" rel="bookmark" class="crp_title">Code Test</a></li><li><a href="http://www.javatang.com/archives/2006/06/27/512049.html" rel="bookmark" class="crp_title">一个理解“单例模式”最好的例子</a></li><li><a href="http://www.javatang.com/archives/2007/03/13/5026128.html" rel="bookmark" class="crp_title">按照指定的类型排序</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.javatang.com/archives/2010/07/29/0513435.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IE6下使png透明的完美解决方式（续）</title>
		<link>http://www.javatang.com/archives/2010/07/19/1736428.html</link>
		<comments>http://www.javatang.com/archives/2010/07/19/1736428.html#comments</comments>
		<pubDate>Mon, 19 Jul 2010 09:17:36 +0000</pubDate>
		<dc:creator>Jet</dc:creator>
				<category><![CDATA[DynamicLanguage]]></category>
		<category><![CDATA[IE6]]></category>

		<guid isPermaLink="false">http://www.javatang.com/?p=428</guid>
		<description><![CDATA[自从上次介绍一种在IE6下使png透明的方式之后，今天又遇到一种更加完美的解决方案 DD_belatedPNG，详细的使用方法大家可以看文档，我这里只是简单说一下如何来使用（其实使用的时候也非常简单）： 首先是在DD_belatedPNG网站上下载js文件，可以选择压缩后的文件，然后按照下面的方式在页面中引用（这一点和unitpngfix调用方式一样）： &#60;!--[if lt IE 7]&#62; &#60;script type=&#34;text/javascript&#34; src=&#34;scripts/DD_belatedPNG.js&#34;&#62;&#60;/script&#62; &#60;script type=&#34;text/javascript&#34;&#62; // 设定需要渲染的DOM对象 DD_belatedPNG.fix('.png_bg'); &#60;/script&#62; &#60;![endif]--&#62; 接下来就是体现DD_belatedPNG灵活性的一面了，与UnitPNG不同，DD_belatedPNG需要你使用一个js脚本来指定所要渲染的页面对象，其选择方式与CSS中选择器的方式相同。像上面的例子就是选择页面中所有class为png_bg的DOM对象。 另外，为了做一个统一的设置，我的做法是直接在DD_belatedPNG.js文件后面加上DD_belatedPNG.fix(&#8216;.png_bg&#8217;);，这样只要在页面中设定DOM对象的class为png_bg就可以了，这一点可以做到与UnitPNG相同，只不过UnitPNG的名称是固定的，而DD_belatedPNG可以随心所欲了。 参考资料： DD_belatedPNG，最佳IE6环境下实现PNG-24的应用方案 Related Posts:Javascript的国际化方案使用DWR出现“例外被抛出且未被接住”错误的原因和解决办法Javascript怎样设置文本框的readonly属性？优秀的JavaScript类库 &#8211; RicoIE6下使png透明的完美解决方式]]></description>
			<content:encoded><![CDATA[<p>自从上次介绍一种<a href="http://www.javatang.com/archives/2010/07/08/4615417.html" target="_blank">在IE6下使png透明的方式</a>之后，今天又遇到一种更加完美的解决方案 <a href="http://dillerdesign.com/experiment/DD_belatedPNG/" target="_blank">DD_belatedPNG</a>，详细的使用方法大家可以看文档，我这里只是简单说一下如何来使用（其实使用的时候也非常简单）：</p>
<p>首先是在DD_belatedPNG网站上<a href="http://dillerdesign.com/experiment/DD_belatedPNG/#download" target="_blank">下载</a>js文件，可以选择压缩后的文件，然后按照下面的方式在页面中引用（这一点和unitpngfix调用方式一样）：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">&lt;!--[if lt IE 7]&gt; </span></li>
<li><span style="color: #ffa500;">&lt;script type=&quot;text/javascript&quot; src=&quot;scripts/DD_belatedPNG.js&quot;&gt;&lt;/script&gt; </span></li>
<li><span style="color: #ffa500;">&lt;script type=&quot;text/javascript&quot;&gt;</span></li>
<li><span style="color: #ffa500;">// 设定需要渲染的DOM对象</span></li>
<li><span style="color: #ffa500;">DD_belatedPNG.fix('.png_bg');</span></li>
<li><span style="color: #ffa500;">&lt;/script&gt;</span></li>
<li><span style="color: #ffa500;">&lt;![endif]--&gt;</span></li></ol></div>
<p>接下来就是体现DD_belatedPNG灵活性的一面了，与UnitPNG不同，DD_belatedPNG需要你使用一个js脚本来指定所要渲染的页面对象，其选择方式与CSS中选择器的方式相同。像上面的例子就是选择页面中所有class为png_bg的DOM对象。</p>
<p>另外，为了做一个统一的设置，我的做法是直接在DD_belatedPNG.js文件后面加上DD_belatedPNG.fix(&#8216;.png_bg&#8217;);，这样只要在页面中设定DOM对象的class为png_bg就可以了，这一点可以做到与UnitPNG相同，只不过UnitPNG的名称是固定的，而DD_belatedPNG可以随心所欲了。</p>
<p>参考资料：<br />
<a href="http://www.osmn00.com/?p=419" target="_blank">DD_belatedPNG，最佳IE6环境下实现PNG-24的应用方案</a></p>
<div id="crp_related"><h2>Related Posts:</h2><ul><li><a href="http://www.javatang.com/archives/2008/04/20/5034268.html" rel="bookmark" class="crp_title">Javascript的国际化方案</a></li><li><a href="http://www.javatang.com/archives/2008/07/10/1954272.html" rel="bookmark" class="crp_title">使用DWR出现“例外被抛出且未被接住”错误的原因和解决办法</a></li><li><a href="http://www.javatang.com/archives/2007/10/06/5104204.html" rel="bookmark" class="crp_title">Javascript怎样设置文本框的readonly属性？</a></li><li><a href="http://www.javatang.com/archives/2006/03/16/440510.html" rel="bookmark" class="crp_title">优秀的JavaScript类库 &#8211; Rico</a></li><li><a href="http://www.javatang.com/archives/2010/07/08/4615417.html" rel="bookmark" class="crp_title">IE6下使png透明的完美解决方式</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.javatang.com/archives/2010/07/19/1736428.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>彻底修改Google Chrome浏览器的安装目录</title>
		<link>http://www.javatang.com/archives/2010/07/11/4201420.html</link>
		<comments>http://www.javatang.com/archives/2010/07/11/4201420.html#comments</comments>
		<pubDate>Sun, 11 Jul 2010 09:42:01 +0000</pubDate>
		<dc:creator>Jet</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[Web&Server]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[google chrome]]></category>
		<category><![CDATA[浏览器]]></category>
		<category><![CDATA[谷歌浏览器]]></category>

		<guid isPermaLink="false">http://www.javatang.com/?p=420</guid>
		<description><![CDATA[谷歌浏览器以其简洁的界面和快速的Javascript解析速度v8引擎，很快在浏览器市场中占有了一席之地，我们公司的绝大多数系统就建议用户选择使用谷歌浏览器。但是说起他的安装绝对是个杯具：一是默认下载的是在线安装版的；另外一个就是默认的安装目录在系统盘，而且不能选择！！ 本文就针对这两点分别给出一个解决方案。 一、下载谷歌的离线安装包 谷歌浏览器的默认下载地址是：http://www.google.com/chrome/eula.html，其实这个地址后面可以跟很多的参数，最关键的一个参数就是standalone，将它的值设置为1就可以下载离线版了，具体的地址是：http://www.google.com/chrome/eula.html?hl=en&#038;standalone=1，里面的hl是设定语言的，可以不用。 二、修改谷歌浏览器的安装目录 因为谷歌浏览器的安装程序很难进行定制，所以我们没有办法直接修改安装程序来实现修改安装目录的目的，但是可以通过一个小的技巧来制作绿色版的谷歌浏览器。 首先使用上面的方法下载离线版的谷歌浏览器，然后默认安装，安装完之后最好不要允许浏览器。谷歌浏览器的默认安装目录如下： Win7: C:\Users\系统用户名\AppData\Local\Google\Chrome\Application WinXP : C:\Documents and Settings\系统用户名\Local Settings\Application Data\Google\Chrome 进入上述目录之后，首先将chrome.exe放到包含版本号的目录中，然后将这个目录拷贝到你所想要放的地方，最后修改这个目录名就可以了，比如可以修改成GoogleChrome。 还有最后一步，就是设置UserData。可以在刚才那个GoogleChrome目录下面创建一个新的目录UserData，然后创建chrome.exe的一个快捷方式，在快捷“目标”后面加上下面的参数： &#8211;user-data-dir=UserData 然后启动的时候直接运行这个快捷方式就可以了。 最后卸载刚才安装在系统盘下的Google浏览器就可以了。 注意几点： 1. 如果不将chrome拷贝到版本号的目录下，直接运行chrome.exe则无效； 2. 如果不在添加了&#8211;user-data-dir参数的快捷方式下运行程序，则默认情况下的User Data目录还是在系统盘下面。 参考资料： 简单制作自己的Google Chrome (谷歌浏览器)绿化版 修改chrome的安装目录 Related Posts:离线版Google Chrome Frame下载GOOGLE服务列表Google发布“网站导航”谈谈网络存储服务Tor 使用经验总结]]></description>
			<content:encoded><![CDATA[<p>谷歌浏览器以其简洁的界面和快速的Javascript解析速度v8引擎，很快在浏览器市场中占有了一席之地，我们公司的绝大多数系统就建议用户选择使用谷歌浏览器。但是说起他的安装绝对是个杯具：一是默认下载的是在线安装版的；另外一个就是默认的安装目录在系统盘，而且不能选择！！ 本文就针对这两点分别给出一个解决方案。</p>
<p>一、下载谷歌的离线安装包<br />
谷歌浏览器的默认下载地址是：http://www.google.com/chrome/eula.html，其实这个地址后面可以跟很多的参数，最关键的一个参数就是standalone，将它的值设置为1就可以下载离线版了，具体的地址是：<a href="http://www.google.com/chrome/eula.html?hl=en&#038;standalone=1" target="_blank">http://www.google.com/chrome/eula.html?hl=en&#038;standalone=1</a>，里面的hl是设定语言的，可以不用。</p>
<p>二、修改谷歌浏览器的安装目录<br />
因为谷歌浏览器的安装程序很难进行定制，所以我们没有办法直接修改安装程序来实现修改安装目录的目的，但是可以通过一个小的技巧来<a href="http://www.javatang.com/archives/2010/07/11/1906420.html">制作绿色版的谷歌浏览器</a>。</p>
<p>首先使用上面的方法下载离线版的谷歌浏览器，然后默认安装，安装完之后最好不要允许浏览器。谷歌浏览器的默认安装目录如下：</p>
<blockquote><p>
Win7:<br />
C:\Users\系统用户名\AppData\Local\Google\Chrome\Application<br />
WinXP :<br />
C:\Documents and Settings\系统用户名\Local Settings\Application Data\Google\Chrome
</p></blockquote>
<p>进入上述目录之后，首先<strong>将chrome.exe放到包含版本号的目录中</strong>，然后将这个目录拷贝到你所想要放的地方，最后修改这个目录名就可以了，比如可以修改成GoogleChrome。</p>
<p>还有最后一步，就是设置UserData。可以在刚才那个GoogleChrome目录下面创建一个新的目录UserData，然后创建chrome.exe的一个快捷方式，在快捷“目标”后面加上下面的参数：</p>
<blockquote><p>
&#8211;user-data-dir=UserData
</p></blockquote>
<p>然后启动的时候直接运行这个快捷方式就可以了。</p>
<p>最后卸载刚才安装在系统盘下的Google浏览器就可以了。</p>
<p>注意几点：<br />
1. 如果不将chrome拷贝到版本号的目录下，直接运行chrome.exe则无效；<br />
2. 如果不在添加了&#8211;user-data-dir参数的快捷方式下运行程序，则默认情况下的User Data目录还是在系统盘下面。</p>
<p>参考资料：<br />
<a href="http://m0618.com/?p=814" target="_blank">简单制作自己的Google Chrome (谷歌浏览器)绿化版</a><br />
<a href="http://blog.csdn.net/sdpdww/archive/2010/02/24/5323723.aspx" target="_blank">修改chrome的安装目录</a></p>
<div id="crp_related"><h2>Related Posts:</h2><ul><li><a href="http://www.javatang.com/archives/2010/01/19/4754372.html" rel="bookmark" class="crp_title">离线版Google Chrome Frame下载</a></li><li><a href="http://www.javatang.com/archives/2006/09/18/365065.html" rel="bookmark" class="crp_title">GOOGLE服务列表</a></li><li><a href="http://www.javatang.com/archives/2007/03/12/5833125.html" rel="bookmark" class="crp_title">Google发布“网站导航”</a></li><li><a href="http://www.javatang.com/archives/2007/11/28/1236247.html" rel="bookmark" class="crp_title">谈谈网络存储服务</a></li><li><a href="http://www.javatang.com/archives/2006/08/25/204359.html" rel="bookmark" class="crp_title">Tor 使用经验总结</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.javatang.com/archives/2010/07/11/4201420.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IE6下使png透明的完美解决方式</title>
		<link>http://www.javatang.com/archives/2010/07/08/4615417.html</link>
		<comments>http://www.javatang.com/archives/2010/07/08/4615417.html#comments</comments>
		<pubDate>Thu, 08 Jul 2010 11:46:15 +0000</pubDate>
		<dc:creator>Jet</dc:creator>
				<category><![CDATA[RIA]]></category>
		<category><![CDATA[Web&Server]]></category>

		<guid isPermaLink="false">http://www.javatang.com/?p=417</guid>
		<description><![CDATA[众所周知，在IE6下面无法使用png透明的效果，虽然IE6的市场份额逐渐下滑，但是在国内依然保持最旺盛的占有率，这一点无法进行忽视。下午的时候Google了一下目前的解决方案，发现IE PNG Fix 2.0 Alpha 4虽然使用非常比较方便而且可以打到预期的效果，但是在加载页面的时候非常的缓慢，这一点是无法容忍的。还有使用滤镜的，但是效果一般，而且没有通用性。 最后在蓝色理想的一个帖子里面有网友提到使用Unit PNG Fix，结果用下来发现效果和速度都非常令人满意，调用方法我简单的说一下吧： 首先在http://labs.unitinteractive.com/unitpngfix.php页面的下面下载unitpngfix.zip文件。 接下来将压缩包里面的两个文件：unitpngfix.js和clear.gif拷贝到站点的某个位置，假设将unitpngfix.js拷贝到scripts目录，clear.gif放到images目录，这个时候需要特别注意的是，必须修改unitpngfix.js文件中clear变量的值，也就是clear.gif相对于unitpngfix.js文件的路径，上面的情况就要修改成： var clear=&#34;../images/clear.gif&#34;; //path to clear.gif 最后在页面中进行调用unitpngfix.js文件就可以了。 &#60;!--[if lt IE 7]&#62; &#60;script type=&#34;text/javascript&#34; src=&#34;scripts/unitpngfix.js&#34;&#62;&#60;/script&#62; &#60;![endif]--&#62; 到这里其实已经看到效果了，不过默认情况下unitpngfix会对页面中所有的元素进行渲染处理，这样的话未免有些影响页面加载的效率，有一种方法就是可以将所要渲染的元素后面使用名为unitPng的style进行限定。 延伸阅读：IE6下使png透明的完美解决方式（续） OK，Enjoy It！ 参考资料： 老问题重提：IE6下png背景透明 ie6处理png透明图片问题 ie6 png透明解决方法简单高效 Related Posts:IE6下使png透明的完美解决方式（续）Javascript的国际化方案使用DWR出现“例外被抛出且未被接住”错误的原因和解决办法Javascript怎样设置文本框的readonly属性？JSEclipse现在是Adodb的项目了]]></description>
			<content:encoded><![CDATA[<p>众所周知，在IE6下面无法使用png透明的效果，虽然IE6的市场份额逐渐下滑，但是在国内依然保持最旺盛的占有率，这一点无法进行忽视。下午的时候Google了一下目前的解决方案，发现<a href="http://www.twinhelix.com/css/iepngfix/" target="_blank">IE PNG Fix 2.0 Alpha 4</a>虽然使用非常比较方便而且可以打到预期的效果，但是在加载页面的时候非常的缓慢，这一点是无法容忍的。还有使用滤镜的，但是效果一般，而且没有通用性。</p>
<p>最后在<a href="http://bbs.blueidea.com/viewthread.php?tid=2892826&#038;page=1#pid4266799" target="_blank">蓝色理想的一个帖子里面</a>有网友提到使用<a href="http://labs.unitinteractive.com/unitpngfix.php" target="_blank">Unit PNG Fix</a>，结果用下来发现效果和速度都非常令人满意，调用方法我简单的说一下吧：</p>
<p>首先在<a href="http://labs.unitinteractive.com/unitpngfix.php" target="_blank">http://labs.unitinteractive.com/unitpngfix.php</a>页面的下面下载<a href="http://labs.unitinteractive.com/downloads/unitpngfix.zip" target="_blank">unitpngfix.zip文件</a>。</p>
<p>接下来将压缩包里面的两个文件：unitpngfix.js和clear.gif拷贝到站点的某个位置，假设将unitpngfix.js拷贝到scripts目录，clear.gif放到images目录，这个时候需要特别注意的是，<strong>必须修改unitpngfix.js文件中clear变量的值，也就是clear.gif相对于unitpngfix.js文件的路径</strong>，上面的情况就要修改成：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">clear</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">../images/clear.gif</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">; </span><span style="color: #ffa500;">//path to clear.gif</span></li></ol></div>
<p>最后在页面中进行调用unitpngfix.js文件就可以了。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline">&lt;!--[if lt IE 7]&gt; </li>
<li>&lt;script type=&quot;text/javascript&quot; src=&quot;scripts/unitpngfix.js&quot;&gt;&lt;/script&gt; </li>
<li>&lt;![endif]--&gt;</li></ol></div>
<p>到这里其实已经看到效果了，不过默认情况下unitpngfix会对页面中所有的元素进行渲染处理，这样的话未免有些影响页面加载的效率，有一种方法就是可以将所要渲染的元素后面使用名为unitPng的style进行限定。</p>
<p>延伸阅读：<a href="http://www.javatang.com/archives/2010/07/19/0824428.html" target="_blank">IE6下使png透明的完美解决方式（续）</a></p>
<p>OK，Enjoy It！</p>
<p>参考资料：<br />
<a href="http://bbs.blueidea.com/thread-2892826-1-1.html" target="_blank">老问题重提：IE6下png背景透明</a><br />
<a href="http://ninggy.javaeye.com/blog/559643" target="_blank">ie6处理png透明图片问题</a><br />
<a href="http://buliangniu.javaeye.com/blog/556735" target="_blank">ie6 png透明解决方法简单高效</a></p>
<div id="crp_related"><h2>Related Posts:</h2><ul><li><a href="http://www.javatang.com/archives/2010/07/19/1736428.html" rel="bookmark" class="crp_title">IE6下使png透明的完美解决方式（续）</a></li><li><a href="http://www.javatang.com/archives/2008/04/20/5034268.html" rel="bookmark" class="crp_title">Javascript的国际化方案</a></li><li><a href="http://www.javatang.com/archives/2008/07/10/1954272.html" rel="bookmark" class="crp_title">使用DWR出现“例外被抛出且未被接住”错误的原因和解决办法</a></li><li><a href="http://www.javatang.com/archives/2007/10/06/5104204.html" rel="bookmark" class="crp_title">Javascript怎样设置文本框的readonly属性？</a></li><li><a href="http://www.javatang.com/archives/2007/01/30/303293.html" rel="bookmark" class="crp_title">JSEclipse现在是Adodb的项目了</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.javatang.com/archives/2010/07/08/4615417.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ExtJS中调用focus方法无效的解决方法</title>
		<link>http://www.javatang.com/archives/2010/07/08/4916413.html</link>
		<comments>http://www.javatang.com/archives/2010/07/08/4916413.html#comments</comments>
		<pubDate>Thu, 08 Jul 2010 02:49:16 +0000</pubDate>
		<dc:creator>Jet</dc:creator>
				<category><![CDATA[DynamicLanguage]]></category>
		<category><![CDATA[ExtJS]]></category>

		<guid isPermaLink="false">http://www.javatang.com/?p=413</guid>
		<description><![CDATA[在ExtJS中用于盒型控件的BoxComponent（TextField、TextArea、CheckBox、ComboBox等的父类）提供了一个focus方法，用于控制光标的焦点。但是在调用该方法的时候往往会发现达不到预期的效果，很多时候根本没有办法来控制光标的焦点。 在BoxComponent文档中对focus方法的说明如下： focus( [Boolean selectText], [Boolean/Number delay] ) : Ext.Component Try to focus this component. 可以看到这个方法有两个可选的参数，第一个的含义是是否全选中所在的文本内容（默认为false），第二个是设置一个延迟的时间，单位是毫秒（默认为0，不延迟）。下面是两种调用的方法： var textField = new Ext.form.TextField({ // 属性就省略了 .... }); // 默认的调用 textField.focus(); // 设置延迟的调用 textField.focus(false, 100); // 等同于上面的方式 textField.focus.defer(100, textField); 如果做一个测试的话可以发现使用后面两种方式之后就会达到预期的效果了，这是因为所有的可视控件需要一个渲染的时间的，如果不设置focus的延迟时间，则再调用focus方法的时候该控件还没有渲染完成，当时是不会成功了。 参考资料：关于window的中field的focus问题 Related Posts:ExtJS中TextField或TextArea支持按键事件的条件PHP常见问题及解答用js检测是否安装指定插件的函数密码保护：JDBC操作SQL Server小结Java中long类型直接赋值大数字的问题]]></description>
			<content:encoded><![CDATA[<p>在ExtJS中用于盒型控件的BoxComponent（TextField、TextArea、CheckBox、ComboBox等的父类）提供了一个focus方法，用于控制光标的焦点。但是在调用该方法的时候往往会发现达不到预期的效果，很多时候根本没有办法来控制光标的焦点。</p>
<p>在BoxComponent文档中对focus方法的说明如下：</p>
<blockquote><p>
focus( [Boolean selectText], [Boolean/Number delay] ) : Ext.Component<br />
Try to focus this component.
</p></blockquote>
<p>可以看到这个方法有两个可选的参数，第一个的含义是是否全选中所在的文本内容（默认为false），第二个是设置一个延迟的时间，单位是毫秒（默认为0，不延迟）。下面是两种调用的方法：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">textField</span><span style="color: Gray;"> = </span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Blue;">Ext</span><span style="color: Gray;">.</span><span style="color: Blue;">form</span><span style="color: Gray;">.</span><span style="color: Blue;">TextField</span><span style="color: Olive;">({</span></li>
<li><span style="color: #ffa500;">// 属性就省略了 .... </span></li>
<li><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li>
<li><span style="color: #ffa500;">// 默认的调用</span></li>
<li><span style="color: Blue;">textField</span><span style="color: Gray;">.</span><span style="color: Blue;">focus</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: #ffa500;">// 设置延迟的调用</span></li>
<li><span style="color: Blue;">textField</span><span style="color: Gray;">.</span><span style="color: Blue;">focus</span><span style="color: Olive;">(</span><span style="color: Green;">false</span><span style="color: Gray;">, </span><span style="color: Maroon;">100</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: #ffa500;">// 等同于上面的方式</span></li>
<li><span style="color: Blue;">textField</span><span style="color: Gray;">.</span><span style="color: Blue;">focus</span><span style="color: Gray;">.</span><span style="color: Blue;">defer</span><span style="color: Olive;">(</span><span style="color: Maroon;">100</span><span style="color: Gray;">, </span><span style="color: Blue;">textField</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<p>如果做一个测试的话可以发现使用后面两种方式之后就会达到预期的效果了，这是因为所有的可视控件需要一个渲染的时间的，如果不设置focus的延迟时间，则再调用focus方法的时候该控件还没有渲染完成，当时是不会成功了。</p>
<p>参考资料：<a href="http://www.javaeye.com/topic/157650" target="_blank">关于window的中field的focus问题</a></p>
<div id="crp_related"><h2>Related Posts:</h2><ul><li><a href="http://www.javatang.com/archives/2010/07/07/5638409.html" rel="bookmark" class="crp_title">ExtJS中TextField或TextArea支持按键事件的条件</a></li><li><a href="http://www.javatang.com/archives/2007/06/08/5540166.html" rel="bookmark" class="crp_title">PHP常见问题及解答</a></li><li><a href="http://www.javatang.com/archives/2007/10/28/2751231.html" rel="bookmark" class="crp_title">用js检测是否安装指定插件的函数</a></li><li><a href="http://www.javatang.com/archives/2006/05/03/061828.html" rel="bookmark" class="crp_title">密码保护：JDBC操作SQL Server小结</a></li><li><a href="http://www.javatang.com/archives/2006/08/10/441253.html" rel="bookmark" class="crp_title">Java中long类型直接赋值大数字的问题</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.javatang.com/archives/2010/07/08/4916413.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ExtJS中TextField或TextArea支持按键事件的条件</title>
		<link>http://www.javatang.com/archives/2010/07/07/5638409.html</link>
		<comments>http://www.javatang.com/archives/2010/07/07/5638409.html#comments</comments>
		<pubDate>Wed, 07 Jul 2010 03:56:38 +0000</pubDate>
		<dc:creator>Jet</dc:creator>
				<category><![CDATA[DynamicLanguage]]></category>
		<category><![CDATA[ExtJS]]></category>

		<guid isPermaLink="false">http://www.javatang.com/?p=409</guid>
		<description><![CDATA[在ExtJS中，对事件进行捕获有两种方式：一种是设置listeners属性，另外一种就是使用on方法，代码如下： var textArea = new Ext.form.TextArea({ &#160; listeners: { &#160; &#160; 'keyup': { &#160; &#160; &#160; fn: function(o, evt)&#160;{}, &#160; &#160; &#160; scope: this &#160; &#160; } &#160; } }); &#160; // 也可以使用on方法 textArea.on('keypress', function(o, evt), this); 但是如果这样的话还是无法捕获按键事件，原来除了增加监听之外，还要设置一个enableKeyEvents属性，该属性的作用是是否处理按键事件，默认是false。 参考资料： 不显示删除回复显示所有回复显示星级回复显示得分回复 Extjs中textarea不支持keyup事件？ Related Posts:ExtJS中调用focus方法无效的解决方法IE6中出现“无法设置selected属性”的bug及解决方法遍历JavaScript对象的所有属性Javascript的国际化方案用js检测是否安装指定插件的函数]]></description>
			<content:encoded><![CDATA[<p>在ExtJS中，对事件进行捕获有两种方式：一种是设置listeners属性，另外一种就是使用on方法，代码如下：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">textArea</span><span style="color: Gray;"> = </span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Blue;">Ext</span><span style="color: Gray;">.</span><span style="color: Blue;">form</span><span style="color: Gray;">.</span><span style="color: Blue;">TextArea</span><span style="color: Olive;">({</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Blue;">listeners</span><span style="color: Gray;">: </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #8b0000;">'</span><span style="color: Red;">keyup</span><span style="color: #8b0000;">'</span><span style="color: Gray;">: </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">fn</span><span style="color: Gray;">: </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">o</span><span style="color: Gray;">, </span><span style="color: Blue;">evt</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">{}</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">scope</span><span style="color: Gray;">: </span><span style="color: Green;">this</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: #ffa500;">// 也可以使用on方法</span></li>
<li><span style="color: Blue;">textArea</span><span style="color: Gray;">.</span><span style="color: Blue;">on</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">keypress</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">o</span><span style="color: Gray;">, </span><span style="color: Blue;">evt</span><span style="color: Olive;">)</span><span style="color: Gray;">, </span><span style="color: Green;">this</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<p>但是如果这样的话还是无法捕获按键事件，原来除了增加监听之外，还要设置一个enableKeyEvents属性，该属性的作用是是否处理按键事件，默认是false。</p>
<p>参考资料： <a href="http://topic.csdn.net/u/20090703/09/c51c8fdd-5e77-4a6f-98b0-9dec6b957fd0.html" target="_blank">不显示删除回复显示所有回复显示星级回复显示得分回复 Extjs中textarea不支持keyup事件？</a></p>
<div id="crp_related"><h2>Related Posts:</h2><ul><li><a href="http://www.javatang.com/archives/2010/07/08/4916413.html" rel="bookmark" class="crp_title">ExtJS中调用focus方法无效的解决方法</a></li><li><a href="http://www.javatang.com/archives/2008/10/19/0704277.html" rel="bookmark" class="crp_title">IE6中出现“无法设置selected属性”的bug及解决方法</a></li><li><a href="http://www.javatang.com/archives/2006/09/13/442864.html" rel="bookmark" class="crp_title">遍历JavaScript对象的所有属性</a></li><li><a href="http://www.javatang.com/archives/2008/04/20/5034268.html" rel="bookmark" class="crp_title">Javascript的国际化方案</a></li><li><a href="http://www.javatang.com/archives/2007/10/28/2751231.html" rel="bookmark" class="crp_title">用js检测是否安装指定插件的函数</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.javatang.com/archives/2010/07/07/5638409.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/


Served from: www.javatang.com @ 2010-09-03 23:59:40 -->