<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.3.3" -->
<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/"
	>

<channel>
	<title>Java堂</title>
	<link>http://www.javatang.com</link>
	<description>Java Tang</description>
	<pubDate>Fri, 15 Aug 2008 15:37:06 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.3</generator>
	<language>en</language>
			<item>
		<title>修改Spark的默认字体大小</title>
		<link>http://www.javatang.com/archives/2008/07/13/5634273.html</link>
		<comments>http://www.javatang.com/archives/2008/07/13/5634273.html#comments</comments>
		<pubDate>Sun, 13 Jul 2008 05:56:34 +0000</pubDate>
		<dc:creator>Jet</dc:creator>
		
		<category><![CDATA[JavaPlateform]]></category>

		<category><![CDATA[spark]]></category>

		<guid isPermaLink="false">http://www.javatang.com/archives/2008/07/13/5634273.html</guid>
		<description><![CDATA[Spark是目前使用最多的Jabber客户端，最新的版本中已经提供了简体中文语言包，但是因为默认情况下Spark中使用的字号为11，所以中文汉字显示的非常难看。

如果显示正常的话就需要将字号低于12的修改为12。首先在Spark源代码中查找 new Font 关键词，将所有设置为12以下的修改为12；然后打开 org.jivesoftware.Spark ，将其中的
SyntheticaLookAndFeel.setFont(&#34;Dialog&#34;, 11);
修改为
SyntheticaLookAndFeel.setFont(&#34;Dialog&#34;, 12);
重新编译之后就显示正常了。

]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.igniterealtime.org/projects/spark/" target="_blank">Spark</a>是目前使用最多的Jabber客户端，最新的版本中已经提供了简体中文语言包，但是因为默认情况下Spark中使用的字号为11，所以中文汉字显示的非常难看。<br />
<img src='http://www.javatang.com/wp-content/ggg.png' alt='spark默认界面' /></p>
<p>如果显示正常的话就需要将字号低于12的修改为12。首先在Spark源代码中查找 new Font 关键词，将所有设置为12以下的修改为12；然后打开 org.jivesoftware.Spark ，将其中的</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;">SyntheticaLookAndFeel</span><span style="color: Gray;">.</span><span style="color: Blue;">setFont</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">Dialog</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: Maroon;">11</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<p>修改为</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;">SyntheticaLookAndFeel</span><span style="color: Gray;">.</span><span style="color: Blue;">setFont</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">Dialog</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: Maroon;">12</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<p>重新编译之后就显示正常了。<br />
<img src='http://www.javatang.com/wp-content/hhh.png' alt='显示正常的Spark' /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.javatang.com/archives/2008/07/13/5634273.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>使用DWR出现“例外被抛出且未被接住”错误的原因和解决办法</title>
		<link>http://www.javatang.com/archives/2008/07/10/1954272.html</link>
		<comments>http://www.javatang.com/archives/2008/07/10/1954272.html#comments</comments>
		<pubDate>Thu, 10 Jul 2008 08:19:54 +0000</pubDate>
		<dc:creator>Jet</dc:creator>
		
		<category><![CDATA[DynamicLanguage]]></category>

		<category><![CDATA[JavaPlateform]]></category>

		<category><![CDATA[RIA]]></category>

		<category><![CDATA[dwr]]></category>

		<guid isPermaLink="false">http://www.javatang.com/archives/2008/07/10/1954272.html</guid>
		<description><![CDATA[DWR提供了两个js文件：engine.js和util.js，通常来说我们都是动态来引用这两个js文件，在官方的例子中也是这样做的（其中dwr是mapping时的路径）：
&#60;script type=&#34;text/javascript&#34; src=&#34;/dwr/engine.js&#34;&#62;&#60;/script&#62;
&#60;script&#160;type=&#34;text/javascript&#34; src=&#34;/dwr/util.js&#34;&#62;&#60;/script&#62;
但是根据页面优化原则，我们如果将所有的js文件进行压缩整合在一起的话将会极大的减少页面加载的时间。但是当我们将上面的两个js文件下载下来然后跟其他js文件整合压缩之后，访问页面的时候会出现一个“例外被抛出且未被接住”的脚本错误。
用百度搜索了一下基本只搜到一篇名为《dwr应用时请注意（初学者）》的文章，文章中建议使用他在附件中所提供的dwr.jar包。但是作者所提供的dwr版本有些低，另外作者并没有在文章中说明造成问题的原因。
后来将异常转换为英文 Exception thrown and not caught 在google中搜索了一下，得知是因为没有在页面中动态引用engine.js，因为dwr在运行的时候需要动态控制这个文件。
但是这样的话就达不到压缩engine.js文件的目的了，我无意中在官方看到一篇专门讲解怎样缓存engine.js文件的文章，下面我就将作者建议的做法说明如下：
首先使用动态加载engine.js文件，然后将该文件下载下来。打开下载下来的engine.js文件，然后将第226到242行之间的文字剪切下来，然后将dwr.jar包中的org/directwebremoting/engine.js文件内容删除，然后粘贴到该文件中并替换dwr.jar包中原来的engine.js文件，内容大致如下：
dwr.engine._origScriptSessionId = &#34;${scriptSessionId}&#34;;
dwr.engine._sessionCookieName = &#34;${sessionCookieName}&#34;;
dwr.engine._allowGetForSafariButMakeForgeryEasier = &#34;${allowGetForSafariButMakeForgeryEasier}&#34;;
dwr.engine._scriptTagProtection = &#34;${scriptTagProtection}&#34;;
dwr.engine._defaultPath = &#34;${defaultPath}&#34;;
dwr.engine._pollWithXhr = &#34;${pollWithXhr}&#34;;
这样就可以将下载下来的engin.js文件同其他文件进行压缩合并了，但是在页面中还必须动态引用engine.js：
&#60;script type=&#34;text/javascript&#34; src=&#34;/dwr/engine.js&#34;&#62;&#60;/script&#62;
这样一来即压缩了engine.js文件中静态的部分，又使用了engine.js中的动态部分，并且最重要的是“例外被抛出且未被接住”异常也不会再出现了。
参考资料：
Caching engine.js
]]></description>
			<content:encoded><![CDATA[<p>DWR提供了两个js文件：engine.js和util.js，通常来说我们都是动态来引用这两个js文件，在官方的例子中也是这样做的（其中dwr是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;">script</span><span style="color: Gray;"> </span><span style="color: #00008b;">type</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">text/javascript</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">src</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">/dwr/engine.js</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;&lt;/</span><span style="color: Green;">script</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">script</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">type</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">text/javascript</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">src</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">/dwr/util.js</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;&lt;/</span><span style="color: Green;">script</span><span style="color: Olive;">&gt;</span></li></ol></div>
<p>但是根据页面优化原则，我们如果将所有的<a href="http://www.javatang.com/archives/2008/04/13/0212267.html" target="_blank">js文件进行压缩整合在一起</a>的话将会极大的减少页面加载的时间。但是当我们将上面的两个js文件下载下来然后跟其他js文件整合压缩之后，访问页面的时候会出现一个“例外被抛出且未被接住”的脚本错误。</p>
<p>用百度搜索了一下基本只搜到一篇名为<a href="http://yahaitt.javaeye.com/blog/147795" target="_blank">《dwr应用时请注意（初学者）》</a>的文章，文章中建议使用他在附件中所提供的dwr.jar包。但是作者所提供的dwr版本有些低，另外作者并没有在文章中说明造成问题的原因。</p>
<p>后来将异常转换为英文 Exception thrown and not caught 在google中搜索了一下，得知是因为没有在页面中动态引用engine.js，因为dwr在运行的时候需要动态控制这个文件。</p>
<p>但是这样的话就达不到压缩engine.js文件的目的了，我无意中在官方看到一篇专门讲解<a href="http://directwebremoting.org/dwr/browser/engine/static" target="_blank">怎样缓存engine.js文件的文章</a>，下面我就将作者建议的做法说明如下：</p>
<p>首先使用动态加载engine.js文件，然后将该文件下载下来。打开下载下来的engine.js文件，然后将第226到242行之间的文字剪切下来，然后将dwr.jar包中的org/directwebremoting/engine.js文件内容删除，然后粘贴到该文件中并替换dwr.jar包中原来的engine.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"><span style="color: Blue;">dwr</span><span style="color: Gray;">.</span><span style="color: Blue;">engine</span><span style="color: Gray;">.</span><span style="color: Blue;">_origScriptSessionId</span><span style="color: Gray;"> = </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">${scriptSessionId}</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">;</span></li>
<li><span style="color: Blue;">dwr</span><span style="color: Gray;">.</span><span style="color: Blue;">engine</span><span style="color: Gray;">.</span><span style="color: Blue;">_sessionCookieName</span><span style="color: Gray;"> = </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">${sessionCookieName}</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">;</span></li>
<li><span style="color: Blue;">dwr</span><span style="color: Gray;">.</span><span style="color: Blue;">engine</span><span style="color: Gray;">.</span><span style="color: Blue;">_allowGetForSafariButMakeForgeryEasier</span><span style="color: Gray;"> = </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">${allowGetForSafariButMakeForgeryEasier}</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">;</span></li>
<li><span style="color: Blue;">dwr</span><span style="color: Gray;">.</span><span style="color: Blue;">engine</span><span style="color: Gray;">.</span><span style="color: Blue;">_scriptTagProtection</span><span style="color: Gray;"> = </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">${scriptTagProtection}</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">;</span></li>
<li><span style="color: Blue;">dwr</span><span style="color: Gray;">.</span><span style="color: Blue;">engine</span><span style="color: Gray;">.</span><span style="color: Blue;">_defaultPath</span><span style="color: Gray;"> = </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">${defaultPath}</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">;</span></li>
<li><span style="color: Blue;">dwr</span><span style="color: Gray;">.</span><span style="color: Blue;">engine</span><span style="color: Gray;">.</span><span style="color: Blue;">_pollWithXhr</span><span style="color: Gray;"> = </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">${pollWithXhr}</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">;</span></li></ol></div>
<p>这样就可以将下载下来的engin.js文件同其他文件进行压缩合并了，但是在页面中还必须动态引用engine.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"><span style="color: Olive;">&lt;</span><span style="color: Green;">script</span><span style="color: Gray;"> </span><span style="color: #00008b;">type</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">text/javascript</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">src</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">/dwr/engine.js</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;&lt;/</span><span style="color: Green;">script</span><span style="color: Olive;">&gt;</span></li></ol></div>
<p>这样一来即压缩了engine.js文件中静态的部分，又使用了engine.js中的动态部分，并且最重要的是“例外被抛出且未被接住”异常也不会再出现了。</p>
<p>参考资料：<br />
<a href="http://directwebremoting.org/dwr/browser/engine/static" target="_blank">Caching engine.js</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.javatang.com/archives/2008/07/10/1954272.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>如何使用DWR2.0的注解功能</title>
		<link>http://www.javatang.com/archives/2008/07/07/5648271.html</link>
		<comments>http://www.javatang.com/archives/2008/07/07/5648271.html#comments</comments>
		<pubDate>Mon, 07 Jul 2008 08:56:48 +0000</pubDate>
		<dc:creator>Jet</dc:creator>
		
		<category><![CDATA[DynamicLanguage]]></category>

		<category><![CDATA[JavaPlateform]]></category>

		<category><![CDATA[RIA]]></category>

		<category><![CDATA[ajax]]></category>

		<category><![CDATA[dwr]]></category>

		<guid isPermaLink="false">http://www.javatang.com/archives/2008/07/07/5648271.html</guid>
		<description><![CDATA[DWR2.0新增加了JDK5的注解(Annotation)功能，使用注解功能之后可以从很大程度上简化了原来的dwr.xml的配置，使用起来非常的方便。
一、配置DWR使用注解功能
如果让dwr使用注解功能需要在web.xml进行如下配置：
&#60;servlet&#62;
&#160; &#160; &#160; &#160; &#60;servlet-name&#62;dwr-invoker&#60;/servlet-name&#62;
&#160; &#160; &#160; &#160; &#60;servlet-class&#62;org.directwebremoting.servlet.DwrServlet&#60;/servlet-class&#62;
&#160; &#160; &#160; &#160; &#60;init-param&#62;
&#160; &#160; &#160; &#160; &#160; &#160; &#60;param-name&#62;debug&#60;/param-name&#62;
&#160; &#160; &#160; &#160; &#160; &#160; &#60;param-value&#62;true&#60;/param-value&#62;
&#160; &#160; &#160; &#160; &#60;/init-param&#62;
&#160; &#160; &#160; &#160; &#60;!-- 将设定注解的域对象和业务实现类放在下面列表中，中间使用逗号间隔 --&#62;
&#160; &#160; &#160; &#160; &#60;init-param&#62;
&#160; &#160; &#160; &#160; &#160; &#160; &#60;param-name&#62;classes&#60;/param-name&#62;
&#160; &#160; &#160; &#160; &#160; &#160; &#60;param-value&#62;
&#160; &#160; &#160; &#160; &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>DWR2.0新增加了JDK5的注解(Annotation)功能，使用注解功能之后可以从很大程度上简化了原来的dwr.xml的配置，使用起来非常的方便。</p>
<p>一、配置DWR使用注解功能</p>
<p>如果让dwr使用注解功能需要在web.xml进行如下配置：</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</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">servlet-name</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">dwr-invoker</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">servlet-name</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">servlet-class</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">org.directwebremoting.servlet.DwrServlet</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">servlet-class</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">init-param</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">param-name</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">debug</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">param-name</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">param-value</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">true</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">param-value</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">init-param</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">&lt;!-- 将设定注解的域对象和业务实现类放在下面列表中，中间使用逗号间隔 --&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">init-param</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">param-name</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">classes</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">param-name</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">param-value</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; com.javatang.domain.Book,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; com.javatang.bank.Bank,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; com.javatang.dao.BookDao</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">param-value</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">init-param</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</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: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">servlet-name</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">dwr-invoker</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">servlet-name</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">url-pattern</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">/scripts/ajax/*</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">url-pattern</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: Olive;">&gt;</span></li></ol></div>
<p>这样设置之后就可以在dwr中使用注解了，非常的方便。</p>
<p>二、DWR提供的注解类型<br />
经常用到的注解主要有：@RemoteProxy、@RemoteMethod、@DataTransferObject和@RemoteProperty。</p>
<p>1. @RemoteProxy和@RemoteMethod<br />
@RemoteMethod对应于原来dwr.xml文件中的create标签，用于创建DWR所提供的远程方法；而@RemoteMethod对应于create标签中的 &lt;include method=&#8221;"/>，用来指定所要暴露的方法名称。我们举例来说明：</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: Gray;">@</span><span style="color: Blue;">RemoteProxy</span><span style="color: Olive;">(</span><span style="color: Blue;">name</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">bankFunctions</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span></li>
<li><span style="color: Green;">public</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">class</span><span style="color: Gray;">&nbsp; </span><span style="color: Blue;">Bank</span><span style="color: Gray;"> </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: Blue;">RemoteMethod</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;">buy</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; </span><span style="color: #ffa500;">// ...</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Olive;">}</span></li></ol></div>
<p>从上面可以看出，@RemoteProxy表示这个类将用于远程方法，而使用@RemoteMethod指定所要暴露的方法，没有使用@RemoteMethod的方法将不会显示在客户端。<br />
上面的注释使用dwr.xml表示如下：</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: Gray;">!</span><span style="color: #00008b;">DOCTYPE</span><span style="color: Gray;"> </span><span style="color: #00008b;">dwr</span><span style="color: Gray;"> </span><span style="color: #00008b;">PUBLIC</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN</span><span style="color: #8b0000;">&quot;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">http://getahead.ltd.uk/dwr/dwr20.dtd</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">dwr</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;">allow</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">create</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">creator</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">new</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">javascript</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">bankFunctions</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">include</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">method</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">buy</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">create</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;">allow</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;/</span><span style="color: Green;">dwr</span><span style="color: Olive;">&gt;</span></li></ol></div>
<p>如果使用Spring中的DAO活逻辑层则需要进行如下的设置：</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;">// BookDao</span></li>
<li><span style="color: Gray;">@</span><span style="color: Blue;">RemoteProxy</span><span style="color: Olive;">(</span><span style="color: Blue;">creator</span><span style="color: Gray;"> = </span><span style="color: Blue;">SpringCreator</span><span style="color: Gray;">.</span><span style="color: Green;">class</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">creatorParams</span><span style="color: Gray;"> = @</span><span style="color: Blue;">Param</span><span style="color: Olive;">(</span><span style="color: Blue;">name</span><span style="color: Gray;"> = </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">beanName</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: Blue;">value</span><span style="color: Gray;"> = </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">bookDao</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; </span><span style="color: Blue;">name</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">bookFunctions</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span></li>
<li><span style="color: Green;">public</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">class</span><span style="color: Gray;">&nbsp; </span><span style="color: Blue;">BookDao</span><span style="color: Gray;"> </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: Blue;">RemoteMethod</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;">addBook</span><span style="color: Olive;">(</span><span style="color: Blue;">Book</span><span style="color: Gray;"> </span><span style="color: Blue;">book</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; </span><span style="color: #ffa500;">// ...</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Olive;">}</span></li></ol></div>
<p>通过指定@RemoteProxy中的creator类型为SpringCreator，然后在creatorParams指定对应的beanName名称。对应的dwr.xml文件如下：</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: Gray;">!</span><span style="color: #00008b;">DOCTYPE</span><span style="color: Gray;"> </span><span style="color: #00008b;">dwr</span><span style="color: Gray;"> </span><span style="color: #00008b;">PUBLIC</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN</span><span style="color: #8b0000;">&quot;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">http://getahead.ltd.uk/dwr/dwr20.dtd</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">dwr</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;">allow</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">create</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">creator</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">spring</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">javascript</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">bookFunctions</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">param</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">name</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">beanName</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">value</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">bookDao</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">include</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">method</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">addBook</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">create</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;">allow</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;/</span><span style="color: Green;">dwr</span><span style="color: Olive;">&gt;</span></li></ol></div>
<p>2. @DataTransferObject和@RemoteProperty<br />
@DataTransferObject对应于原来dwr.xml文件中的convert标签，用于转换Java对象；@RemoteProperty则对应于convert标签中的 &lt;param name=&#8221;include&#8221; value=&#8221;" />。</p>
<p>举例说明一下：</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: Gray;">@</span><span style="color: Blue;">DataTransferObject</span></li>
<li><span style="color: Green;">public</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">class</span><span style="color: Gray;"> </span><span style="color: Blue;">Book</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; @</span><span style="color: Blue;">RemoteProperty</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">private</span><span style="color: Gray;">&nbsp;</span><span class="hl-types">int</span><span style="color: Gray;"> </span><span style="color: Blue;">id</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; @</span><span style="color: Blue;">RemoteProperty</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">private</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">String</span><span style="color: Gray;"> </span><span style="color: Blue;">name</span><span style="color: Gray;">;</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 style="color: Blue;">Book</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: 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">int</span><span style="color: Gray;"> </span><span style="color: Blue;">getId</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; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">id</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;">setId</span><span style="color: Olive;">(</span><span class="hl-types">int</span><span style="color: Gray;"> </span><span style="color: Blue;">id</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; </span><span style="color: Green;">this</span><span style="color: Gray;">.</span><span style="color: Blue;">id</span><span style="color: Gray;"> = </span><span style="color: Blue;">id</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 style="color: Blue;">String</span><span style="color: Gray;"> </span><span style="color: Blue;">getName</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; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">name</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;">setName</span><span style="color: Olive;">(</span><span style="color: Blue;">String</span><span style="color: Gray;"> </span><span style="color: Blue;">name</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; </span><span style="color: Green;">this</span><span style="color: Gray;">.</span><span style="color: Blue;">name</span><span style="color: Gray;"> = </span><span style="color: Blue;">name</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: Olive;">}</span></li></ol></div>
<p>@RemoteProperty可以放在JavaBean中的私有变量上面，也可以放在getXXX方法上面。另外如果想将JavaBean中所有的属性都暴露出来的话，不需要在任何属性上面添加@RemoteProperty注释就可以了。</p>
<p>上面的注释对应的dwr.xml文件如下：</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: Gray;">!</span><span style="color: #00008b;">DOCTYPE</span><span style="color: Gray;"> </span><span style="color: #00008b;">dwr</span><span style="color: Gray;"> </span><span style="color: #00008b;">PUBLIC</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN</span><span style="color: #8b0000;">&quot;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">http://getahead.ltd.uk/dwr/dwr20.dtd</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">dwr</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;">allow</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">convert</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">converter</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">bean</span><span style="color: #8b0000;">&quot;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #00008b;">match</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">com.javatang.domain.Book</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">param</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">name</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">include</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">value</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">id, name</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">convert</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">&lt;!-- 或者用下面的方式也可以</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp; &lt;convert converter=&quot;bean&quot; match=&quot;com.javatang.domain.Book&quot; /&gt;</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp; --&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">allow</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;/</span><span style="color: Green;">dwr</span><span style="color: Olive;">&gt;</span></li></ol></div>
<p>关于具体每个注释使用的方法已经所包含的参数可以参考Java Doc。使用DWR2.0的注解极大的简化了原来dwr.xml的配置，非常的方便。</p>
<p>参考资料：<br />
<a href="http://directwebremoting.org/dwr/server/annotations" target="_blank">DWR Annotations</a><br />
<a href="http://www.matrix.org.cn/thread.shtml?topicId=9ebc11f7-329a-11dc-a189-fd356e54e2a4&#038;forumId=41&#038;fid=41" target="_blank">[原创]DWR Annotations and Spring</a><br />
<a href="http://www.cnblogs.com/kylindai/archive/2008/04/02/1135286.html?P_AVPASS=PHDGBITAVPASST" target="_blank">DWR Annotations 使用 SpringCreator</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.javatang.com/archives/2008/07/07/5648271.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Spring+Velocity中模板路径的问题</title>
		<link>http://www.javatang.com/archives/2008/06/26/5407270.html</link>
		<comments>http://www.javatang.com/archives/2008/06/26/5407270.html#comments</comments>
		<pubDate>Thu, 26 Jun 2008 13:54:07 +0000</pubDate>
		<dc:creator>Jet</dc:creator>
		
		<category><![CDATA[JavaPlateform]]></category>

		<category><![CDATA[javaee]]></category>

		<category><![CDATA[spring]]></category>

		<category><![CDATA[velocity]]></category>

		<guid isPermaLink="false">http://www.javatang.com/archives/2008/06/26/5407270.html</guid>
		<description><![CDATA[在Spring中使用Velocity进行视图渲染的时候需要注意一个路径的设置问题。Spring本身提供了一个用于对Velocity进行设置的类，我们做如下设置：
&#60;bean id=&#34;velocityConfig&#34; class=&#34;org.springframework.web.servlet.view.velocity.VelocityConfigurer&#34;&#62;
&#160; &#160; &#160; &#160; &#60;property&#160;name=&#34;configLocation&#34; value=&#34;/WEB-INF/velocity.properties&#34; /&#62;
&#160; &#160; &#160; &#160; &#60;property&#160;name=&#34;resourceLoaderPath&#34; value=&#34;/WEB-INF/templates&#34; /&#62;
&#160; &#160; &#60;/bean&#62;
使用configLocation属性设置了velocity配置文件的路径及文件名，而resourceLoaderPath设置了模板文件所在的位置。这里我们看到，所有的设置路径都是基于网站根目录的。
这个时候对于velocity.properties中用于设置宏文件的velocimacro.library选项而言，他所对应的目录就是前面resourceLoaderPath中设置的目录了，比如我们可以设置如下：
velocimacro.library = macro.vm
并且对于模板文件中#parse指令所包含的文件也是基于resourceLoaderPath中所设置的目录。
如果我们将resourceLoaderPath设置为网站跟目录，而模板文件放在了/WEB-INF/template下，这个时候velocimacro.library和#parse指令所包含的文件路径就是基于网站根目录了，例如有个section.vm文件放在了/WEB-INF/template目录下，这个时候在模板文件中必须写成#parse(&#8221;/WEB-INF/template/section.vm&#8221;)才可以，可以看出这样非常的麻烦。
因此我们不能想当然的将resourceLoaderPath设置为网站的根目录，而是直接指向模板文件所在的目录。或许你认为我这么说有些可笑，但是有的时候我们往往在这些看似不经意的问题上浪费时间。
]]></description>
			<content:encoded><![CDATA[<p>在Spring中使用Velocity进行视图渲染的时候需要注意一个路径的设置问题。Spring本身提供了一个用于对Velocity进行设置的类，我们做如下设置：</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;">bean</span><span style="color: Gray;"> </span><span style="color: #00008b;">id</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">velocityConfig</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">class</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">org.springframework.web.servlet.view.velocity.VelocityConfigurer</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">property</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">name</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">configLocation</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">value</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">/WEB-INF/velocity.properties</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">property</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">name</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">resourceLoaderPath</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">value</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">/WEB-INF/templates</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </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;">bean</span><span style="color: Olive;">&gt;</span></li></ol></div>
<p>使用configLocation属性设置了velocity配置文件的路径及文件名，而resourceLoaderPath设置了模板文件所在的位置。这里我们看到，所有的设置路径都是基于网站根目录的。</p>
<p>这个时候对于velocity.properties中用于设置宏文件的velocimacro.library选项而言，他所对应的目录就是前面resourceLoaderPath中设置的目录了，比如我们可以设置如下：</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">velocimacro.library = macro.vm</li></ol></div>
<p>并且对于模板文件中#parse指令所包含的文件也是基于resourceLoaderPath中所设置的目录。</p>
<p>如果我们将resourceLoaderPath设置为网站跟目录，而模板文件放在了/WEB-INF/template下，这个时候velocimacro.library和#parse指令所包含的文件路径就是基于网站根目录了，例如有个section.vm文件放在了/WEB-INF/template目录下，这个时候在模板文件中必须写成#parse(&#8221;/WEB-INF/template/section.vm&#8221;)才可以，可以看出这样非常的麻烦。</p>
<p>因此我们不能想当然的将resourceLoaderPath设置为网站的根目录，而是直接指向模板文件所在的目录。或许你认为我这么说有些可笑，但是有的时候我们往往在这些看似不经意的问题上浪费时间。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.javatang.com/archives/2008/06/26/5407270.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>JPA和Hibernate注解的继承问题</title>
		<link>http://www.javatang.com/archives/2008/06/19/0308269.html</link>
		<comments>http://www.javatang.com/archives/2008/06/19/0308269.html#comments</comments>
		<pubDate>Thu, 19 Jun 2008 15:03:08 +0000</pubDate>
		<dc:creator>Jet</dc:creator>
		
		<category><![CDATA[JavaPlateform]]></category>

		<category><![CDATA[Web&amp;Server]]></category>

		<category><![CDATA[hibernate]]></category>

		<category><![CDATA[jpa]]></category>

		<guid isPermaLink="false">http://www.javatang.com/archives/2008/06/19/0308269.html</guid>
		<description><![CDATA[UUID类型的主键字段是长度为32的字符类型，Hibernate中自带自动生成UUID类型的主键，但有的时候需要自定义长32的字符串最为主键值，因此这里就有了一个分类关系：系统自带的UUID和用户自定义的UUID都有一个共性，都是一个长32的字符。我们基于此创建一个继承体系。
// UUIDBase.java
@MappedSuperclass
public&#160;abstract class UUIDBase {
&#160;
&#160; &#160; protected&#160;String id;
&#160;
&#160; &#160; @Id
&#160; &#160; @Column(nullable=false, updatable=false, length=32)
&#160; &#160; public&#160;String getId() {
&#160; &#160; &#160; &#160; return&#160;id;
&#160; &#160; }
&#160;
&#160; &#160; public&#160;void setId(String id) {
&#160; &#160; &#160; &#160; this.id = id;
&#160; &#160; }
}
// UUIDSystem.java
@MappedSuperclass
public&#160;abstract class UUIDSystem extends UUIDBase {
&#160; &#160; @Override
&#160; &#160; @GeneratedValue(generator=&#34;system-uuid&#34;)
&#160; &#160; @GenericGenerator(name=&#34;system-uuid&#34;, strategy=&#34;uuid&#34;)
&#160; &#160; public&#160;String getId() {
&#160; &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>UUID类型的主键字段是长度为32的字符类型，Hibernate中自带自动生成UUID类型的主键，但有的时候需要自定义长32的字符串最为主键值，因此这里就有了一个分类关系：系统自带的UUID和用户自定义的UUID都有一个共性，都是一个长32的字符。我们基于此创建一个继承体系。</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;">// UUIDBase.java</span></li>
<li><span style="color: Gray;">@</span><span style="color: Blue;">MappedSuperclass</span></li>
<li><span style="color: Green;">public</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">abstract</span><span style="color: Gray;"> </span><span style="color: Green;">class</span><span style="color: Gray;"> </span><span style="color: Blue;">UUIDBase</span><span style="color: Gray;"> </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;">protected</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">String</span><span style="color: Gray;"> </span><span style="color: Blue;">id</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; @</span><span style="color: Blue;">Id</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; @</span><span style="color: Blue;">Column</span><span style="color: Olive;">(</span><span style="color: Blue;">nullable</span><span style="color: Gray;">=</span><span style="color: Green;">false</span><span style="color: Gray;">, </span><span style="color: Blue;">updatable</span><span style="color: Gray;">=</span><span style="color: Green;">false</span><span style="color: Gray;">, </span><span style="color: Blue;">length</span><span style="color: Gray;">=</span><span style="color: Maroon;">32</span><span style="color: Olive;">)</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">public</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">String</span><span style="color: Gray;"> </span><span style="color: Blue;">getId</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; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">id</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;">setId</span><span style="color: Olive;">(</span><span style="color: Blue;">String</span><span style="color: Gray;"> </span><span style="color: Blue;">id</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; </span><span style="color: Green;">this</span><span style="color: Gray;">.</span><span style="color: Blue;">id</span><span style="color: Gray;"> = </span><span style="color: Blue;">id</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: Olive;">}</span></li></ol></div>
<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;">// UUIDSystem.java</span></li>
<li><span style="color: Gray;">@</span><span style="color: Blue;">MappedSuperclass</span></li>
<li><span style="color: Green;">public</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">abstract</span><span style="color: Gray;"> </span><span style="color: Green;">class</span><span style="color: Gray;"> </span><span style="color: Blue;">UUIDSystem</span><span style="color: Gray;"> </span><span style="color: Green;">extends</span><span style="color: Gray;"> </span><span style="color: Blue;">UUIDBase</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; @</span><span style="color: Blue;">Override</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; @</span><span style="color: Blue;">GeneratedValue</span><span style="color: Olive;">(</span><span style="color: Blue;">generator</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">system-uuid</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; @</span><span style="color: Blue;">GenericGenerator</span><span style="color: Olive;">(</span><span style="color: Blue;">name</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">system-uuid</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: Blue;">strategy</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">uuid</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">public</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">String</span><span style="color: Gray;"> </span><span style="color: Blue;">getId</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; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">id</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: Olive;">}</span></li></ol></div>
<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;">// UUIDCustom.java</span></li>
<li><span style="color: Gray;">@</span><span style="color: Blue;">MappedSuperclass</span></li>
<li><span style="color: Green;">public</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">abstract</span><span style="color: Gray;"> </span><span style="color: Green;">class</span><span style="color: Gray;"> </span><span style="color: Blue;">UUIDCustom</span><span style="color: Gray;"> </span><span style="color: Green;">extends</span><span style="color: Gray;"> </span><span style="color: Blue;">UUIDBase</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; @</span><span style="color: Blue;">Override</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; @</span><span style="color: Blue;">GeneratedValue</span><span style="color: Olive;">(</span><span style="color: Blue;">generator</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">custom-uuid</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; @</span><span style="color: Blue;">GenericGenerator</span><span style="color: Olive;">(</span><span style="color: Blue;">name</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">custom-uuid</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: Blue;">strategy</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">package.IDGenerator</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">public</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">String</span><span style="color: Gray;"> </span><span style="color: Blue;">getId</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; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">id</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: Olive;">}</span></li></ol></div>
<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;">// POJO.java</span></li>
<li><span style="color: Gray;">@</span><span style="color: Blue;">Entity</span></li>
<li><span style="color: Green;">public</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">class</span><span style="color: Gray;"> </span><span style="color: Blue;">POJO</span><span style="color: Gray;"> </span><span style="color: Green;">extends</span><span style="color: Gray;"> </span><span style="color: Blue;">UUIDCustom</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #ffa500;">//...</span></li>
<li><span style="color: Olive;">}</span></li></ol></div>
<p>但是如果这样做的话如果对POJO进行操作的时候，会出现如下的异常：<br />
org.hibernate.MappingException: Repeated column in mapping for entity</p>
<p>如果将UUIDBase修改如下：</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;">// UUIDBase.java</span></li>
<li><span style="color: Gray;">@</span><span style="color: Blue;">MappedSuperclass</span></li>
<li><span style="color: Green;">public</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">abstract</span><span style="color: Gray;"> </span><span style="color: Green;">class</span><span style="color: Gray;"> </span><span style="color: Blue;">UUIDBase</span><span style="color: Gray;"> </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;">protected</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">String</span><span style="color: Gray;"> </span><span style="color: Blue;">id</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; @</span><span style="color: Blue;">Id</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; @</span><span style="color: Blue;">Column</span><span style="color: Olive;">(</span><span style="color: Blue;">nullable</span><span style="color: Gray;">=</span><span style="color: Green;">false</span><span style="color: Gray;">, </span><span style="color: Blue;">updatable</span><span style="color: Gray;">=</span><span style="color: Green;">false</span><span style="color: Gray;">, </span><span style="color: Blue;">length</span><span style="color: Gray;">=</span><span style="color: Maroon;">32</span><span style="color: Olive;">)</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; @</span><span style="color: Blue;">GeneratedValue</span><span style="color: Olive;">(</span><span style="color: Blue;">generator</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">system-uuid</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; @</span><span style="color: Blue;">GenericGenerator</span><span style="color: Olive;">(</span><span style="color: Blue;">name</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">system-uuid</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: Blue;">strategy</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">uuid</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">public</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">String</span><span style="color: Gray;"> </span><span style="color: Blue;">getId</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; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">id</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;">setId</span><span style="color: Olive;">(</span><span style="color: Blue;">String</span><span style="color: Gray;"> </span><span style="color: Blue;">id</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; </span><span style="color: Green;">this</span><span style="color: Gray;">.</span><span style="color: Blue;">id</span><span style="color: Gray;"> = </span><span style="color: Blue;">id</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: Olive;">}</span></li></ol></div>
<p>这个时候无论子类中getId()方法使用什么注解都是无效的，最终主键还是按照父类的主键生成器。</p>
<p>为了避免出现这样的错误，建议将主键的注解一步到位，不要使用继承扩展的方式。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.javatang.com/archives/2008/06/19/0308269.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Javascript的国际化方案</title>
		<link>http://www.javatang.com/archives/2008/04/20/5034268.html</link>
		<comments>http://www.javatang.com/archives/2008/04/20/5034268.html#comments</comments>
		<pubDate>Sun, 20 Apr 2008 06:50:34 +0000</pubDate>
		<dc:creator>Jet</dc:creator>
		
		<category><![CDATA[DynamicLanguage]]></category>

		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.javatang.com/archives/2008/04/20/5034268.html</guid>
		<description><![CDATA[目前Ajax框架是层出不穷，而且功能变得越来越强大，从而使得Web页面发展为现在的三层结构之说：HTML + CSS + Script。在使用Javascript的时候涉及到其中一个国际化的问题。
Javascript中没有像Java那样拥有国际化的方案，但是可以使用一些技巧来达到目的。首先将在脚本中用到的文字全部保存到每个语种的文件中，比如简体中文zh_CN.js、英文en.js等等，然后使用动态语言判断客户端浏览器或Cookies的语言来决定加载对应语种的js文件，这样就实现了国际化的效果。
但是对于保存文本的变量而言有不同的形式，可以每个文本指定一个变量，也可以将所有的变量保存到一个或几个数组中。我发现ExtJS框架是采用通过覆盖对应模块的类属性来实现不同模块中文本的多语种显示。下面我就举例来说明这种方式：
/* base.js */
&#160;
if&#160;(javatang== null) var javatang= {};
&#160;
if&#160;(javatang.lang == null) javatang.lang = new function(){
&#160; &#160; this.sampleText= &#34;This is sample text&#34;;
&#160; &#160; // 设置下面的属性 ...
};
&#160;
/* zh_CN.js */
this.sampleText = &#34;例子&#34;;
在HTML页面中调用方式如下：
&#60;!doctype html public &#34;-//W3C//DTD XHTML 1.0 Strict//EN&#34;
&#160; &#34;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&#34;&#62;
&#60;html&#160;xmlns=&#34;http://www.w3.org/1999/xhtml&#34; xml:lang=&#34;gbk&#34; &#62;
&#60;head&#62;
&#60;meta&#160;http-equiv=&#34;content-type&#34; content=&#34;text/html; charset=gbk&#34; /&#62;
&#60;title&#62; Title &#60;/title&#62;
&#60;script&#160;type=&#34;text/javascript&#34; src=&#34;base.js&#34;&#62;&#60;/script&#62;
&#60;script&#160;type=&#34;text/javascript&#34; src=&#34;zh_CN.js&#34;&#62;&#60;/script&#62;
&#60;script&#160;type=&#34;text/javascript&#34;&#62;
// 下面开始在页面中调用
&#60;/script&#62;
&#60;/head&#62;
&#160;
&#60;body&#62;
&#160;
&#60;/body&#62;
&#60;/html&#62;
参考资料：
了解JavaScript类
]]></description>
			<content:encoded><![CDATA[<p>目前Ajax框架是层出不穷，而且功能变得越来越强大，从而使得Web页面发展为现在的三层结构之说：HTML + CSS + Script。在使用Javascript的时候涉及到其中一个国际化的问题。</p>
<p>Javascript中没有像Java那样拥有国际化的方案，但是可以使用一些技巧来达到目的。首先将在脚本中用到的文字全部保存到每个语种的文件中，比如简体中文zh_CN.js、英文en.js等等，然后使用动态语言判断客户端浏览器或Cookies的语言来决定加载对应语种的js文件，这样就实现了国际化的效果。</p>
<p>但是对于保存文本的变量而言有不同的形式，可以每个文本指定一个变量，也可以将所有的变量保存到一个或几个数组中。我发现ExtJS框架是采用通过覆盖对应模块的类属性来实现不同模块中文本的多语种显示。下面我就举例来说明这种方式：</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;">/* base.js */</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Green;">if</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Blue;">javatang</span><span style="color: Gray;">== </span><span style="color: Green;">null</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">javatang</span><span style="color: Gray;">= </span><span style="color: Olive;">{}</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Green;">if</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Blue;">javatang</span><span style="color: Gray;">.</span><span style="color: Blue;">lang</span><span style="color: Gray;"> == </span><span style="color: Green;">null</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Blue;">javatang</span><span style="color: Gray;">.</span><span style="color: Blue;">lang</span><span style="color: Gray;"> = </span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Green;">function</span><span style="color: Olive;">(){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">this</span><span style="color: Gray;">.</span><span style="color: Blue;">sampleText</span><span style="color: Gray;">= </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">This is sample text</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #ffa500;">// 设置下面的属性 ...</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;">/* zh_CN.js */</span></li>
<li><span style="color: Green;">this</span><span style="color: Gray;">.</span><span style="color: Blue;">sampleText</span><span style="color: Gray;"> = </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">例子</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">;</span></li></ol></div>
<p>在HTML页面中调用方式如下：</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: Gray;">!</span><span style="color: #00008b;">doctype</span><span style="color: Gray;"> </span><span style="color: #00008b;">html</span><span style="color: Gray;"> </span><span style="color: #00008b;">public</span><span style="color: Gray;"> </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">-//W3C//DTD XHTML 1.0 Strict//EN</span><span style="color: #8b0000;">&quot;</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">html</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">xmlns</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">http://www.w3.org/1999/xhtml</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">xml:lang</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">gbk</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">head</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">meta</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">http-equiv</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">content-type</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">content</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">text/html; charset=gbk</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">title</span><span style="color: Olive;">&gt;</span><span style="color: Gray;"> Title </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">title</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">script</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">type</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">text/javascript</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">src</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">base.js</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;&lt;/</span><span style="color: Green;">script</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">script</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">type</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">text/javascript</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">src</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">zh_CN.js</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;&lt;/</span><span style="color: Green;">script</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">script</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">type</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">text/javascript</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">// 下面开始在页面中调用</span></li>
<li><span style="color: Olive;">&lt;/</span><span style="color: Green;">script</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;/</span><span style="color: Green;">head</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">body</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Olive;">&lt;/</span><span style="color: Green;">body</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;/</span><span style="color: Green;">html</span><span style="color: Olive;">&gt;</span></li></ol></div>
<p>参考资料：<br />
<a href="http://www.xmlasp.net/n1849c17.aspx" target="_blank">了解JavaScript类</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.javatang.com/archives/2008/04/20/5034268.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>提高页面相应速度之压缩优化js和css文件</title>
		<link>http://www.javatang.com/archives/2008/04/13/0212267.html</link>
		<comments>http://www.javatang.com/archives/2008/04/13/0212267.html#comments</comments>
		<pubDate>Sun, 13 Apr 2008 17:02:12 +0000</pubDate>
		<dc:creator>Jet</dc:creator>
		
		<category><![CDATA[DynamicLanguage]]></category>

		<category><![CDATA[ajax]]></category>

		<category><![CDATA[css]]></category>

		<category><![CDATA[js]]></category>

		<guid isPermaLink="false">http://www.javatang.com/archives/2008/04/13/0212267.html</guid>
		<description><![CDATA[Steve Souders在他的《High Performance Web Sites》一书中提出提高网页效率的14条准则，这些可以使用Yahoo! YSlow来进行一个比较形象的检测。
这里主要来说一下第一条准则：Make Fewer HTTP Requests，意思就是尽可能的减少HTTP请求。当时要达到这个目的有很多种方法，其中最重要的一点就是将CSS文件和Javascript文件分别进行压缩和合并，这样就在很大程度上减少了浏览器对服务器的HTTP请求此处，另外一旦被浏览器下载到本地可以对此进行缓存，从而提高了加载速度。
有关于这方面的工具最优秀且使用最为广泛的开源软件非YUI Compressor莫属了。但是YUICompressor只能使用命令行一个个对js或css文件进行压缩，现在我们就通过使用ant脚本来达到批量压缩合并多个文件的目的。
下面以压缩js文件为例进行说明。
首先做一个关于js文件编码规范的约定：所有的原始文件均为 .source.js，经过压缩处理后文件变为.js，将多个压缩后的文件合并后的文件名称为all-min.js。
接下来可以写下面的ant脚本：
&#60;!-- 对YUICompressor的引用 --&#62;
&#60;property&#160;name=&#34;js.dir&#34; value=&#34;${web.dir}/scripts&#34; /&#62;
&#60;property&#160;name=&#34;js.release.name&#34; value=&#34;all-min.js&#34;/&#62;
&#160;
&#60;!-- 删除之前压缩合并过的文件 --&#62;
&#60;delete&#62;
&#160; &#160; &#60;fileset&#160;dir=&#34;${js.dir}&#34; includes=&#34;${js.release.name}&#34;/&#62;
&#60;/delete&#62;
&#160; &#160; &#160; &#160; 
&#60;!-- 执行 yuicompressor 压缩JS
&#160;&#160; -- parallel=&#34;false&#34;：对fileset中的每个文件都执行一次executable参数的命令
&#160; -- dest 执行目录
&#160;&#160; --&#62;
&#60;apply&#160;executable=&#34;java&#34; parallel=&#34;false&#34; verbose=&#34;true&#34; dest=&#34;${js.dir}&#34;&#62;
&#160; &#160; &#60;fileset&#160;dir=&#34;${js.dir}&#34;&#62;
&#160; &#160; &#160; &#160; &#60;include&#160;name=&#34;**/*.source.js&#34;/&#62;
&#160; &#160; &#60;/fileset&#62;
&#160; &#160; &#160; &#160; &#60;arg&#160;line=&#34;-jar&#34;/&#62;
&#160; &#160; &#160; &#160; &#60;arg&#160;path=&#34;${yuicompressor}&#34;/&#62;
&#160; &#160; &#60;!-- [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.oreillynet.com/pub/au/2951" target="_blank">Steve Souders</a>在他的<a href="http://www.oreilly.com/catalog/9780596529307/index.html" target="_blank">《High Performance Web Sites》</a>一书中提出提高网页效率的14条准则，这些可以使用Yahoo! <a href="http://developer.yahoo.com/yslow/" target="_blank">YSlow</a>来进行一个比较形象的检测。</p>
<p>这里主要来说一下第一条准则：Make Fewer HTTP Requests，意思就是尽可能的减少HTTP请求。当时要达到这个目的有很多种方法，其中最重要的一点就是将CSS文件和Javascript文件分别进行压缩和合并，这样就在很大程度上减少了浏览器对服务器的HTTP请求此处，另外一旦被浏览器下载到本地可以对此进行缓存，从而提高了加载速度。</p>
<p>有关于这方面的工具最优秀且使用最为广泛的开源软件非<a href="http://developer.yahoo.com/yui/compressor/" target="_blank">YUI Compressor</a>莫属了。但是YUICompressor只能使用命令行一个个对js或css文件进行压缩，现在我们就通过使用ant脚本来达到批量压缩合并多个文件的目的。</p>
<p>下面以压缩js文件为例进行说明。</p>
<p>首先做一个关于js文件编码规范的约定：所有的原始文件均为 <filename>.source.js，经过压缩处理后文件变为<filename>.js，将多个压缩后的文件合并后的文件名称为all-min.js。</p>
<p>接下来可以写下面的ant脚本：</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;!-- 对YUICompressor的引用 --&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">property</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">name</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">js.dir</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">value</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">${web.dir}/scripts</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">property</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">name</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">js.release.name</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">value</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">all-min.js</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: #ffa500;">&lt;!-- 删除之前压缩合并过的文件 --&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">delete</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;">fileset</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">dir</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">${js.dir}</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">includes</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">${js.release.name}</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Olive;">&lt;/</span><span style="color: Green;">delete</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: #ffa500;">&lt;!-- 执行 yuicompressor 压缩JS</span></li>
<li><span style="color: #ffa500;">&nbsp;&nbsp; -- parallel=&quot;false&quot;：对fileset中的每个文件都执行一次executable参数的命令</span></li>
<li><span style="color: #ffa500;">&nbsp; -- dest 执行目录</span></li>
<li><span style="color: #ffa500;">&nbsp;&nbsp; --&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">apply</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">executable</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">java</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">parallel</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">false</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">verbose</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">true</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">dest</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">${js.dir}</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;">fileset</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">dir</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">${js.dir}</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">include</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">name</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">**/*.source.js</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;">fileset</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">arg</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">line</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">-jar</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">arg</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">path</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">${yuicompressor}</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: #ffa500;">&lt;!-- 设置待处理源文件及处理后输出文件的编码格式 --&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">arg</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">line</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">--charset utf-8</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;">srcfile</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;">arg</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">line</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">-o</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: #ffa500;">&lt;!-- 指定文件命名规则 --&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">mapper</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">type</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">glob</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">from</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">*.source.js</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">to</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">*.js</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">targetfile</span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Olive;">&lt;/</span><span style="color: Green;">apply</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: #ffa500;">&lt;!-- 合并文件 --&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">concat</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">destfile</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">${js.dir}/${js.release.name}</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">fixlastline</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">true</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;">fileset</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">dir</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">${js.dir}</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">include</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">name</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">**/*.js</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">exclude</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">name</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">${js.release.name}</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">exclude</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">name</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">**/*.source.js</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">exclude</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">name</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">i18n/*.js</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">fileset</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;/</span><span style="color: Green;">concat</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: #ffa500;">&lt;!-- 删除生成的临时文件 --&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">delete</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;">fileset</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">dir</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">${js.dir}</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">include</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">name</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">**/*.js</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">exclude</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">name</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">${js.release.name}</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">exclude</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">name</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">**/*.source.js</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">exclude</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">name</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">i18n/*.js</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">fileset</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;/</span><span style="color: Green;">delete</span><span style="color: Olive;">&gt;</span></li></ol></div>
<p>参考资料：<br />
<a href="http://www.julienlecomte.net/blog/2007/09/16/" target="_blank">Building Web Applications With Apache Ant</a><br />
<a href="http://blog.gomilko.com/2007/11/29/yui-compression-tool-as-ant-task/" target="_blank">YUI Compression tool as Ant Task</a><br />
<a href="http://blog.csdn.net/lvyuanfang/archive/2007/10/27/1849387.aspx" target="_blank">用yuicompressor和Ant压缩Ext的CSS文件</a><br />
<a href="http://www.aliued.cn/?p=453" target="_blank">用YSlow分析我们页面（完整版）</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.javatang.com/archives/2008/04/13/0212267.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>让非NT服务程序像NT服务那样自动运行</title>
		<link>http://www.javatang.com/archives/2008/03/21/1944266.html</link>
		<comments>http://www.javatang.com/archives/2008/03/21/1944266.html#comments</comments>
		<pubDate>Fri, 21 Mar 2008 07:19:44 +0000</pubDate>
		<dc:creator>Jet</dc:creator>
		
		<category><![CDATA[Web&amp;Server]]></category>

		<category><![CDATA[arp]]></category>

		<category><![CDATA[自动运行]]></category>

		<guid isPermaLink="false">http://www.javatang.com/archives/2008/03/21/1944266.html</guid>
		<description><![CDATA[我们知道在WindowsNT类系统(Windows2000/XP/2003/Vista)下有一种开机不需要登录就自动运行的程序叫做NT服务程序，这样的程序尤其在服务器系统中尤为重要。但是并非所有非常有用的程序都提供NT服务功能的，如何让这些程序像NT服务程序那样自动运行呢？因为即使将这些程序设置为自动运行也仅仅是使用远程账号登录之后才运行，如果注销的话程序也自动关闭了，达不到NT服务程序的效果。
这里采用的方法就是创建一个账号并让该账号自动登录，从而实现自动开机运行非NT服务程序的效果。最近ARP病毒非常猖獗，下面来说明一下怎样让金山ARP防火墙实现NT服务程序运行，其他应用程序可以以此类推。
(1) 在运行里面输入 compmgmt.msc 打开计算机管理控制台，然后在本地用户-用户中右键创建一个名为 arpuser 的用户名并设置一个密码，将下面的“用户下次登录时须更改密码”选项去掉并勾选“用户不能更改密码”和“密码永不过去”。这时候arpuser用户隶属于Users用户组，主要是为了系统安全考虑。
(2) 在运行中输入“rundll32 netplwiz.dll,UsersRunDll”或“control userpasswords2(Win2000中是control userpasswords)”命令打开“用户账号”对话框，在下面的本机用户列表中选中刚才创建的 arpuser 用户然后将上面的“要使用本机，用户必须输入用户名和密码”复选框去掉，点击“应用”按钮之后会出现一个“自动登录”的对话框，将刚才设置的arpuser密码输入其中然后确定即可。
(3) 重新启动计算机，这个时候就会在任务管理器中的用户标签中看到已经自动登录了刚才我们创建的arpuser用户。接下来打开“C:\Documents and Settings\arpuser\「开始」菜单\程序\启动”目录，将金山arp防火墙的快捷方式放入其中，接下来打开金山arp防火墙的安装目录，将该目录的安全属性添加arpuser用户并设置为全部允许。最后再次重启计算机之后，可以通过任务管理器的进程标签中查看金山arp防火墙已经启动了，显示的用户名为arpuser。
最后在说明几点需要注意的地方：
(1) 可以将注册表中HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run中不必要的程序项删除掉，因为这里的运行程序是对于所有登录用户的。
(2) 除了上面介绍的方式之外还可以通过修改注册表的方法实现上面的效果，具体可以参考参考资料中的“WINDOWS NT 自动登陆的实现”文章。
参考资料：
Windows Xp中如何设置自动登录
WINDOWS NT 自动登陆的实现
]]></description>
			<content:encoded><![CDATA[<p>我们知道在WindowsNT类系统(Windows2000/XP/2003/Vista)下有一种开机不需要登录就自动运行的程序叫做NT服务程序，这样的程序尤其在服务器系统中尤为重要。但是并非所有非常有用的程序都提供NT服务功能的，如何让这些程序像NT服务程序那样自动运行呢？因为即使将这些程序设置为自动运行也仅仅是使用远程账号登录之后才运行，如果注销的话程序也自动关闭了，达不到NT服务程序的效果。</p>
<p>这里采用的方法就是创建一个账号并让该账号自动登录，从而实现自动开机运行非NT服务程序的效果。最近ARP病毒非常猖獗，下面来说明一下怎样让<a href="http://buy.duba.net/download/" target="_blank">金山ARP防火墙</a>实现NT服务程序运行，其他应用程序可以以此类推。</p>
<p>(1) 在运行里面输入 compmgmt.msc 打开计算机管理控制台，然后在本地用户-用户中右键创建一个名为 arpuser 的用户名并设置一个密码，将下面的“用户下次登录时须更改密码”选项去掉并勾选“用户不能更改密码”和“密码永不过去”。这时候arpuser用户隶属于Users用户组，主要是为了系统安全考虑。</p>
<p>(2) 在运行中输入“rundll32 netplwiz.dll,UsersRunDll”或“control userpasswords2(Win2000中是control userpasswords)”命令打开“用户账号”对话框，在下面的本机用户列表中选中刚才创建的 arpuser 用户然后将上面的“要使用本机，用户必须输入用户名和密码”复选框去掉，点击“应用”按钮之后会出现一个“自动登录”的对话框，将刚才设置的arpuser密码输入其中然后确定即可。</p>
<p>(3) 重新启动计算机，这个时候就会在任务管理器中的用户标签中看到已经自动登录了刚才我们创建的arpuser用户。接下来打开“C:\Documents and Settings\arpuser\「开始」菜单\程序\启动”目录，将金山arp防火墙的快捷方式放入其中，接下来打开金山arp防火墙的安装目录，将该目录的安全属性添加arpuser用户并设置为全部允许。最后再次重启计算机之后，可以通过任务管理器的进程标签中查看金山arp防火墙已经启动了，显示的用户名为arpuser。</p>
<p>最后在说明几点需要注意的地方：</p>
<p>(1) 可以将注册表中HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run中不必要的程序项删除掉，因为这里的运行程序是对于所有登录用户的。<br />
(2) 除了上面介绍的方式之外还可以通过修改注册表的方法实现上面的效果，具体可以参考参考资料中的“WINDOWS NT 自动登陆的实现”文章。</p>
<p>参考资料：<br />
<a href="http://www.eygle.com/archives/2005/01/windows_xpoeeci.html" target="_blank">Windows Xp中如何设置自动登录</a><br />
<a href="http://www.williamlong.info/archives/86.html" target="_blank">WINDOWS NT 自动登陆的实现</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.javatang.com/archives/2008/03/21/1944266.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Apache+Resin泛域名的设置</title>
		<link>http://www.javatang.com/archives/2008/03/18/2532264.html</link>
		<comments>http://www.javatang.com/archives/2008/03/18/2532264.html#comments</comments>
		<pubDate>Tue, 18 Mar 2008 15:25:32 +0000</pubDate>
		<dc:creator>Jet</dc:creator>
		
		<category><![CDATA[Web&amp;Server]]></category>

		<category><![CDATA[apache]]></category>

		<category><![CDATA[resin]]></category>

		<guid isPermaLink="false">http://www.javatang.com/archives/2008/03/18/2532264.html</guid>
		<description><![CDATA[在Apache中如果设置范域名的话使用 ServerAlias ，比如
&#60;VirtualHost *:80&#62;
&#160; ServerName javatang.com
&#160; ServerAlias *.javatang.com
&#160; ...
&#60;/VirtualHost&#62;
如果使用Apache+Resin架构的话，需要在Resin中设置同样的泛域名与Apache进行对应。在Resin中设置泛域名使用 host-alias-regexp 标签，对应于上面Apache在Resin中设置如下：
&#60;host id=&#34;javatang.com&#34; root-directory=&#34;.&#34;&#62;
&#160;&#160; &#60;host-alias-regexp&#62;^([^/]*).javatang.com&#60;/host-alias-regexp&#62;
&#160;&#160; ...
&#60;/host&#62;
参考资料：
host-alias-regexp 
apache、resin泛域名、多域名设置
]]></description>
			<content:encoded><![CDATA[<p>在Apache中如果设置范域名的话使用 ServerAlias ，比如</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;VirtualHost *:80&gt;</li>
<li>&nbsp; ServerName javatang.com</li>
<li>&nbsp; ServerAlias *.javatang.com</li>
<li>&nbsp; ...</li>
<li>&lt;/VirtualHost&gt;</li></ol></div>
<p>如果使用Apache+Resin架构的话，需要在Resin中设置同样的泛域名与Apache进行对应。在Resin中设置泛域名使用 host-alias-regexp 标签，对应于上面Apache在Resin中设置如下：</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;host id=&quot;javatang.com&quot; root-directory=&quot;.&quot;&gt;</li>
<li>&nbsp;&nbsp; &lt;host-alias-regexp&gt;^([^/]*).javatang.com&lt;/host-alias-regexp&gt;</li>
<li>&nbsp;&nbsp; ...</li>
<li>&lt;/host&gt;</li></ol></div>
<p>参考资料：<br />
<a href="http://caucho.com/resin/doc/host-tags.xtp#host-alias-regexp" target="_blank">host-alias-regexp </a><br />
<a href="http://hi.baidu.com/mygia/blog/item/5c1bcafdaba44547d7887d1b.html" target="_blank">apache、resin泛域名、多域名设置</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.javatang.com/archives/2008/03/18/2532264.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Discuz!一次误删会员用户组的恢复</title>
		<link>http://www.javatang.com/archives/2008/03/13/5500263.html</link>
		<comments>http://www.javatang.com/archives/2008/03/13/5500263.html#comments</comments>
		<pubDate>Thu, 13 Mar 2008 06:55:00 +0000</pubDate>
		<dc:creator>Jet</dc:creator>
		
		<category><![CDATA[Web&amp;Server]]></category>

		<category><![CDATA[discuz]]></category>

		<guid isPermaLink="false">http://www.javatang.com/archives/2008/03/13/5500263.html</guid>
		<description><![CDATA[今天上午好友colin电话过来大呼救急，原来他昨天晚上不知为何把Discuz论坛中的会员用户组除了“新手上路”和“注册会员”之外的用户组都删除了，删除之后发现有许多会员出现了异常：有的出现禁言，有的出现未验证等等。
论坛的版本是Discuz 6，首先在后台将论坛暂时关闭，避免因为新的数据而造成更多的冲突。然后使用SQLyog将原来的数据都备份下来，避免操作数据库出现失误之后可以方便恢复数据。上面这两个前期工作非常重要，事实上在后面的一次操作中就将会员数据给破坏掉了，然后使用备份恢复之后又重新进行操作的。
接下来分析Discuz的数据库，首先查找到记录会员用户组的表名为 cdb_usergroups (前缀cdb_为默认的，或许与你的不同)，接下来使用一条查询语句检查一下会员中的group属性：
select uid,username,credits,groupid from cdb_members order by groupid desc
结果发现很多会员的groupid还是保留的被删除的会员用户组id，找到了问题的原因之后就好办了。
首先恢复默认的会员用户组的数据，打开Discuz6安装包中的upload/install/discuz.sql文件，找到下面一行
DROP TABLE IF EXISTS cdb_usergroups;
然后将这行连同下面创建表结果及插入默认数据的sql语句复制下来在MySQL中执行，这样就将会员用户组中的数据恢复到了默认状态。
然后就是需要查看会员表(cdb_members)中的groupid是否都存在于会员组中，查看所有的groupid是否都在cdb_usergroups.id的范围之内(1-15)：
select uid,username,credits,groupid from cdb_members where groupid&#62;15 order by groupid desc
如果执行之后发现没有数据则表示一切OK了，如果发现有的话则说明肯定添加过新的会员用户组，这个时候需要对会员中的groupid进行整理：
update cdb_members set groupid=10 where (credits&#62;0 and credits&#60;50) and groupid&#62;8;
update&#160;cdb_members set groupid=11 where (credits&#62;50 and credits&#60;200) and groupid&#62;8;
update&#160;cdb_members set groupid=12 where (credits&#62;200 and credits&#60;500) and groupid&#62;8;
update&#160;cdb_members set groupid=13 where (credits&#62;500 and credits&#60;1000) [...]]]></description>
			<content:encoded><![CDATA[<p>今天上午好友colin电话过来大呼救急，原来他昨天晚上不知为何把Discuz论坛中的会员用户组除了“新手上路”和“注册会员”之外的用户组都删除了，删除之后发现有许多会员出现了异常：有的出现禁言，有的出现未验证等等。</p>
<p>论坛的版本是Discuz 6，首先在后台将论坛暂时关闭，避免因为新的数据而造成更多的冲突。然后使用<a href="http://www.javatang.com/archives/tag/sqlyog">SQLyog</a>将原来的数据都备份下来，避免操作数据库出现失误之后可以方便恢复数据。上面这两个前期工作非常重要，事实上在后面的一次操作中就将会员数据给破坏掉了，然后使用备份恢复之后又重新进行操作的。</p>
<p>接下来分析Discuz的数据库，首先查找到记录会员用户组的表名为 cdb_usergroups (前缀cdb_为默认的，或许与你的不同)，接下来使用一条查询语句检查一下会员中的group属性：</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;">select</span><span style="color: Gray;"> </span><span style="color: Blue;">uid</span><span style="color: Gray;">,</span><span style="color: Blue;">username</span><span style="color: Gray;">,</span><span style="color: Blue;">credits</span><span style="color: Gray;">,</span><span style="color: Blue;">groupid</span><span style="color: Gray;"> </span><span style="color: Green;">from</span><span style="color: Gray;"> </span><span style="color: Blue;">cdb_members</span><span style="color: Gray;"> </span><span style="color: Green;">order</span><span style="color: Gray;"> </span><span style="color: Green;">by</span><span style="color: Gray;"> </span><span style="color: Blue;">groupid</span><span style="color: Gray;"> </span><span style="color: Green;">desc</span></li></ol></div>
<p>结果发现很多会员的groupid还是保留的被删除的会员用户组id，找到了问题的原因之后就好办了。</p>
<p>首先恢复默认的会员用户组的数据，打开Discuz6安装包中的upload/install/discuz.sql文件，找到下面一行</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;">DROP</span><span style="color: Gray;"> </span><span style="color: Green;">TABLE</span><span style="color: Gray;"> </span><span style="color: Blue;">IF</span><span style="color: Gray;"> </span><span style="color: #00008b;">EXISTS</span><span style="color: Gray;"> </span><span style="color: Blue;">cdb_usergroups</span><span style="color: Gray;">;</span></li></ol></div>
<p>然后将这行连同下面创建表结果及插入默认数据的sql语句复制下来在MySQL中执行，这样就将会员用户组中的数据恢复到了默认状态。</p>
<p>然后就是需要查看会员表(cdb_members)中的groupid是否都存在于会员组中，查看所有的groupid是否都在cdb_usergroups.id的范围之内(1-15)：</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;">select</span><span style="color: Gray;"> </span><span style="color: Blue;">uid</span><span style="color: Gray;">,</span><span style="color: Blue;">username</span><span style="color: Gray;">,</span><span style="color: Blue;">credits</span><span style="color: Gray;">,</span><span style="color: Blue;">groupid</span><span style="color: Gray;"> </span><span style="color: Green;">from</span><span style="color: Gray;"> </span><span style="color: Blue;">cdb_members</span><span style="color: Gray;"> </span><span style="color: Green;">where</span><span style="color: Gray;"> </span><span style="color: Blue;">groupid</span><span style="color: Gray;">&gt;</span><span style="color: Maroon;">15</span><span style="color: Gray;"> </span><span style="color: Green;">order</span><span style="color: Gray;"> </span><span style="color: Green;">by</span><span style="color: Gray;"> </span><span style="color: Blue;">groupid</span><span style="color: Gray;"> </span><span style="color: Green;">desc</span></li></ol></div>
<p>如果执行之后发现没有数据则表示一切OK了，如果发现有的话则说明肯定添加过新的会员用户组，这个时候需要对会员中的groupid进行整理：</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;">update</span><span style="color: Gray;"> </span><span style="color: Blue;">cdb_members</span><span style="color: Gray;"> </span><span style="color: Green;">set</span><span style="color: Gray;"> </span><span style="color: Blue;">groupid</span><span style="color: Gray;">=</span><span style="color: Maroon;">10</span><span style="color: Gray;"> </span><span style="color: Green;">where</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Blue;">credits</span><span style="color: Gray;">&gt;</span><span style="color: Maroon;">0</span><span style="color: Gray;"> </span><span style="color: Green;">and</span><span style="color: Gray;"> </span><span style="color: Blue;">credits</span><span style="color: Gray;">&lt;</span><span style="color: Maroon;">50</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Green;">and</span><span style="color: Gray;"> </span><span style="color: Blue;">groupid</span><span style="color: Gray;">&gt;</span><span style="color: Maroon;">8</span><span style="color: Gray;">;</span></li>
<li><span style="color: Green;">update</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">cdb_members</span><span style="color: Gray;"> </span><span style="color: Green;">set</span><span style="color: Gray;"> </span><span style="color: Blue;">groupid</span><span style="color: Gray;">=</span><span style="color: Maroon;">11</span><span style="color: Gray;"> </span><span style="color: Green;">where</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Blue;">credits</span><span style="color: Gray;">&gt;</span><span style="color: Maroon;">50</span><span style="color: Gray;"> </span><span style="color: Green;">and</span><span style="color: Gray;"> </span><span style="color: Blue;">credits</span><span style="color: Gray;">&lt;</span><span style="color: Maroon;">200</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Green;">and</span><span style="color: Gray;"> </span><span style="color: Blue;">groupid</span><span style="color: Gray;">&gt;</span><span style="color: Maroon;">8</span><span style="color: Gray;">;</span></li>
<li><span style="color: Green;">update</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">cdb_members</span><span style="color: Gray;"> </span><span style="color: Green;">set</span><span style="color: Gray;"> </span><span style="color: Blue;">groupid</span><span style="color: Gray;">=</span><span style="color: Maroon;">12</span><span style="color: Gray;"> </span><span style="color: Green;">where</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Blue;">credits</span><span style="color: Gray;">&gt;</span><span style="color: Maroon;">200</span><span style="color: Gray;"> </span><span style="color: Green;">and</span><span style="color: Gray;"> </span><span style="color: Blue;">credits</span><span style="color: Gray;">&lt;</span><span style="color: Maroon;">500</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Green;">and</span><span style="color: Gray;"> </span><span style="color: Blue;">groupid</span><span style="color: Gray;">&gt;</span><span style="color: Maroon;">8</span><span style="color: Gray;">;</span></li>
<li><span style="color: Green;">update</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">cdb_members</span><span style="color: Gray;"> </span><span style="color: Green;">set</span><span style="color: Gray;"> </span><span style="color: Blue;">groupid</span><span style="color: Gray;">=</span><span style="color: Maroon;">13</span><span style="color: Gray;"> </span><span style="color: Green;">where</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Blue;">credits</span><span style="color: Gray;">&gt;</span><span style="color: Maroon;">500</span><span style="color: Gray;"> </span><span style="color: Green;">and</span><span style="color: Gray;"> </span><span style="color: Blue;">credits</span><span style="color: Gray;">&lt;</span><span style="color: Maroon;">1000</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Green;">and</span><span style="color: Gray;"> </span><span style="color: Blue;">groupid</span><span style="color: Gray;">&gt;</span><span style="color: Maroon;">8</span><span style="color: Gray;">;</span></li>
<li><span style="color: Green;">update</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">cdb_members</span><span style="color: Gray;"> </span><span style="color: Green;">set</span><span style="color: Gray;"> </span><span style="color: Blue;">groupid</span><span style="color: Gray;">=</span><span style="color: Maroon;">14</span><span style="color: Gray;"> </span><span style="color: Green;">where</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Blue;">credits</span><span style="color: Gray;">&gt;</span><span style="color: Maroon;">1000</span><span style="color: Gray;"> </span><span style="color: Green;">and</span><span style="color: Gray;"> </span><span style="color: Blue;">credits</span><span style="color: Gray;">&lt;</span><span style="color: Maroon;">3000</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Green;">and</span><span style="color: Gray;"> </span><span style="color: Blue;">groupid</span><span style="color: Gray;">&gt;</span><span style="color: Maroon;">8</span><span style="color: Gray;">;</span></li>
<li><span style="color: Green;">update</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">cdb_members</span><span style="color: Gray;"> </span><span style="color: Green;">set</span><span style="color: Gray;"> </span><span style="color: Blue;">groupid</span><span style="color: Gray;">=</span><span style="color: Maroon;">15</span><span style="color: Gray;"> </span><span style="color: Green;">where</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Blue;">credits</span><span style="color: Gray;">&gt;</span><span style="color: Maroon;">3000</span><span style="color: Gray;"> </span><span style="color: Green;">and</span><span style="color: Gray;"> </span><span style="color: Blue;">credits</span><span style="color: Gray;">&lt;</span><span style="color: Maroon;">6000</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Green;">and</span><span style="color: Gray;"> </span><span style="color: Blue;">groupid</span><span style="color: Gray;">&gt;</span><span style="color: Maroon;">8</span><span style="color: Gray;">;</span></li>
<li><span style="color: Green;">update</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">cdb_members</span><span style="color: Gray;"> </span><span style="color: Green;">set</span><span style="color: Gray;"> </span><span style="color: Blue;">groupid</span><span style="color: Gray;">=</span><span style="color: Maroon;">16</span><span style="color: Gray;"> </span><span style="color: Green;">where</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Blue;">credits</span><span style="color: Gray;">&gt;</span><span style="color: Maroon;">6000</span><span style="color: Gray;"> </span><span style="color: Green;">and</span><span style="color: Gray;"> </span><span style="color: Blue;">credits</span><span style="color: Gray;">&lt;</span><span style="color: Maroon;">999999</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Green;">and</span><span style="color: Gray;"> </span><span style="color: Blue;">groupid</span><span style="color: Gray;">&gt;</span><span style="color: Maroon;">8</span><span style="color: Gray;">;</span></li></ol></div>
<p>因为groupid为8以下的都为系统组，不需要进行整理。这样整理之后一切都OK了，重新打开论坛。~~</p>
]]></content:encoded>
			<wfw:commentRss>http://www.javatang.com/archives/2008/03/13/5500263.html/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
