<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>tailorcai</title>
    <description></description>
    <link>http://tailorcai.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>用模板简化factory的实现</title>
        <author>tailorcai</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tailorcai.javaeye.com">tailorcai</a>&nbsp;
          链接：<a href="http://tailorcai.javaeye.com/blog/204059" style="color:red;">http://tailorcai.javaeye.com/blog/204059</a>&nbsp;
          发表时间: 2008年06月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">
// test-object-create-template.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include &lt;boost\ptr_container\ptr_vector.hpp>
#include &lt;iostream>
#include &lt;windows.h>

using namespace std;

class BASE : boost::noncopyable
{
public:
	virtual      ~BASE()   {}
};

class T1 : public BASE{
public:
	T1() {
		cout &lt;&lt; "T1 created\n";
	}
	virtual ~T1() {
		cout &lt;&lt; "T1 destroied\n";

	}
};

class T2 : public BASE{
public:
	T2() {
		cout &lt;&lt; "T2 created\n";
	}
	virtual ~T2() {
		cout &lt;&lt; "T2 destroied\n";
	}
};

class Factory {
public:
	boost::ptr_vector&lt;BASE> ptr_set;
	Factory() {

	}
	template&lt;class T>
	T* get() {
		static T* g_ptr = NULL;
		if( !g_ptr ) {
			g_ptr = new T();
			ptr_set.push_back( g_ptr );
		}
		return g_ptr;
	}
};

int _tmain(int argc, _TCHAR* argv[])
{
	{
		boost::ptr_vector&lt;BASE> ptr_set;
		ptr_set.push_back( new T1);
		ptr_set.push_back( new T2);
	}
	{
		Factory f;
		T1* t1 = f.get&lt;T1>();
		T2* t2 = f.get&lt;T2>();
		T1* t3 = f.get&lt;T1>();

		assert( f.ptr_set.size() == 2);

	}
	//delete t1;
	//delete t2;
	Sleep(1000);
	return 0;
}


</pre>
          <br/>
          <span style="color:red;">
            <a href="http://tailorcai.javaeye.com/blog/204059#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 16 Jun 2008 12:13:49 +0800</pubDate>
        <link>http://tailorcai.javaeye.com/blog/204059</link>
        <guid>http://tailorcai.javaeye.com/blog/204059</guid>
      </item>
      <item>
        <title>对pywinauto进行修改以支持中文名称的正则表达式</title>
        <author>tailorcai</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tailorcai.javaeye.com">tailorcai</a>&nbsp;
          链接：<a href="http://tailorcai.javaeye.com/blog/192829" style="color:red;">http://tailorcai.javaeye.com/blog/192829</a>&nbsp;
          发表时间: 2008年05月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在find_windows中：<br />        def conv(v):<br />            import logging <br />            logging.debug(v)<br />            v1 = v<br />            v2 = v1.encode('utf8')<br />            return v2<br />        windows = [win for win in windows<br />            if title_regex.match(conv(handleprops.text(win)))]
          <br/>
          <span style="color:red;">
            <a href="http://tailorcai.javaeye.com/blog/192829#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 14 May 2008 09:32:57 +0800</pubDate>
        <link>http://tailorcai.javaeye.com/blog/192829</link>
        <guid>http://tailorcai.javaeye.com/blog/192829</guid>
      </item>
      <item>
        <title>python 正则表达式匹配中文utf8</title>
        <author>tailorcai</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tailorcai.javaeye.com">tailorcai</a>&nbsp;
          链接：<a href="http://tailorcai.javaeye.com/blog/192748" style="color:red;">http://tailorcai.javaeye.com/blog/192748</a>&nbsp;
          发表时间: 2008年05月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">>>> import re
>>> x = u'中国'.encode('utf8')
>>> s = x.__repr__()
>>> s
"'\\xc3\\x96\\xc3\\x90\\xc2\\xb9\\xc3\\xba'"
>>> pattern = '.*%s.*' % s[1:-1]
>>> pattern
'.*\\xc3\\x96\\xc3\\x90\\xc2\\xb9\\xc3\\xba.*'
>>> r = re.match(pattern,u'我是中国人'.encode('utf8'))
>>> r
&lt;_sre.SRE_Match object at 0x012A52C0>
>>> dir(r)
['__copy__', '__deepcopy__', 'end', 'expand', 'group', 'groupdict', 'groups', 'span', 'start']
>>> r.group()
'\xc3\x8e\xc3\x92\xc3\x8a\xc3\x87\xc3\x96\xc3\x90\xc2\xb9\xc3\xba\xc3\x88\xc3\x8b'
>>> </pre><br /><br />我很懒，看代码吧
          <br/>
          <span style="color:red;">
            <a href="http://tailorcai.javaeye.com/blog/192748#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 13 May 2008 22:43:20 +0800</pubDate>
        <link>http://tailorcai.javaeye.com/blog/192748</link>
        <guid>http://tailorcai.javaeye.com/blog/192748</guid>
      </item>
      <item>
        <title>html中的空格</title>
        <author>tailorcai</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tailorcai.javaeye.com">tailorcai</a>&nbsp;
          链接：<a href="http://tailorcai.javaeye.com/blog/190504" style="color:red;">http://tailorcai.javaeye.com/blog/190504</a>&nbsp;
          发表时间: 2008年05月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>今天发现一个奇怪的现象：<br />
段落前面的空格，如果是标准的&quot; &quot;，浏览器会不显示。而如果是&amp;nbsp; 则会正常显示。可能是为了照顾人们写html的方式吧。</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://tailorcai.javaeye.com/blog/190504#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 07 May 2008 10:48:49 +0800</pubDate>
        <link>http://tailorcai.javaeye.com/blog/190504</link>
        <guid>http://tailorcai.javaeye.com/blog/190504</guid>
      </item>
      <item>
        <title>能运行在wince上的基于Python的华容道小游戏</title>
        <author>tailorcai</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tailorcai.javaeye.com">tailorcai</a>&nbsp;
          链接：<a href="http://tailorcai.javaeye.com/blog/189798" style="color:red;">http://tailorcai.javaeye.com/blog/189798</a>&nbsp;
          发表时间: 2008年05月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          基于之前编译的pygame模块，终于可以实现自己的目标，做一个华容道小游戏。也让我的dopodD600有些事情可作。<br /><br />代码比较简单，我就不介绍了。参见代码。贴了一个windows版本的截图<br /><br />相关的模块包见之间的文章
          <br/>
          <span style="color:red;">
            <a href="http://tailorcai.javaeye.com/blog/189798#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 05 May 2008 16:39:52 +0800</pubDate>
        <link>http://tailorcai.javaeye.com/blog/189798</link>
        <guid>http://tailorcai.javaeye.com/blog/189798</guid>
      </item>
      <item>
        <title>编译pygame的font模块</title>
        <author>tailorcai</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tailorcai.javaeye.com">tailorcai</a>&nbsp;
          链接：<a href="http://tailorcai.javaeye.com/blog/189791" style="color:red;">http://tailorcai.javaeye.com/blog/189791</a>&nbsp;
          发表时间: 2008年05月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          之前的文章，只编译了基本的模块，这些模块只依赖于SDL.dll。这次，首先要编译Font模块。<br /><br />Font模块依赖于freetype开源库。下载这个库后，发现已经包含对CE的支持，但是没有evc4的工程文件，因此，建了一个。(debug版本Link的时候有错误，直接编译release即可）<br /><br />相关的目录需要手工修改一下。（必须把freetype/include加到全局的include中）<br /><br />SDL_TTF没有CE的工程，不过很简单，直接创建一个就行了。<br /><br />编译成功后。开始修改pygame的脚本。<br /><br />打开SConstruct<br />加入相关的lib，include，lib path<br /><pre name="code" class="java">LIBS=["python25","SDL", "SDL_TTF"],
CPPPATH=["include","../../SDL-1.2.13/include","../../SDL_ttf-2.0.9"],
LIBPATH=["lib","z:/output"]</pre><br />在lines中加入<br /><pre name="code" class="java">font src/font.c $(SDL) $(DEBUG</pre><br /><br />重新编译就可以了
          <br/>
          <span style="color:red;">
            <a href="http://tailorcai.javaeye.com/blog/189791#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 05 May 2008 16:29:40 +0800</pubDate>
        <link>http://tailorcai.javaeye.com/blog/189791</link>
        <guid>http://tailorcai.javaeye.com/blog/189791</guid>
      </item>
      <item>
        <title>编译pygame的wince版本</title>
        <author>tailorcai</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tailorcai.javaeye.com">tailorcai</a>&nbsp;
          链接：<a href="http://tailorcai.javaeye.com/blog/189463" style="color:red;">http://tailorcai.javaeye.com/blog/189463</a>&nbsp;
          发表时间: 2008年05月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          预先准备的包参见前一篇文章。（包括需要copy的目录和文件）<br /><br />1. 下载并编译SDL 1.2.13<br /><br />2. 对Pygame的代码进行修改：去掉signal.h,long long.（去掉Longlong会对transform有影响，不过暂时用不到，不知道有没有更好的解决方案）<br /><br />3. 将编译wince需要的文件copy到pygame/ce下<br /><br />4. 修改SConstruct文件如下：<br /><pre name="code" class="java">class CEBuildEnvironment(Environment):
	def __init__(self):
	    Environment.__init__(self, 	 
	        MSEVC_PLATFORM = 'POCKET PC 2003',
	        MSEVC_SUBPLATFORM = 'Win32 (WCE ARMV4)',
	        tools = ['mslink', 'msevc', 'zip'],
	        toolpath = '.'
	        )

class PythonCEBuildEnvironment(CEBuildEnvironment):
	def __init__(self):
	    CEBuildEnvironment.__init__(self)
	    self.Append(CPPDEFINES = ['WIN32'],
	                LIBS=["python25","SDL"],
	                CPPPATH=["include","../../SDL-1.2.13/include"],
	                LIBPATH=["lib","../../SDL-1.2.13/VisualCE/SDL/Pocket PC 2003 (ARMV4)/Debug"])

	def PythonExtension(self, target, sources, **kw):
	    self.SharedLibrary(target, sources, SHLIBSUFFIX='.pyd', **kw)

lines = """
base src/base.c $(SDL) $(DEBUG)
#cdrom src/cdrom.c $(SDL) $(DEBUG)
constants src/constants.c $(SDL) $(DEBUG)
display src/display.c $(SDL) $(DEBUG)
event src/event.c $(SDL) $(DEBUG)
fastevent src/fastevent.c src/fastevents.c $(SDL) $(DEBUG)
key src/key.c $(SDL) $(DEBUG)
mouse src/mouse.c $(SDL) $(DEBUG)
rect src/rect.c $(SDL) $(DEBUG)
rwobject src/rwobject.c $(SDL) $(DEBUG)
surface src/surface.c src/alphablit.c src/surface_fill.c $(SDL) $(DEBUG)
surflock src/surflock.c $(SDL) $(DEBUG)
time src/time.c $(SDL) $(DEBUG)
joystick src/joystick.c $(SDL) $(DEBUG)
draw src/draw.c $(SDL) $(DEBUG)
image src/image.c $(SDL) $(DEBUG)
overlay src/overlay.c $(SDL) $(DEBUG)
transform src/transform.c src/rotozoom.c src/scale2x.c $(SDL) $(DEBUG)
mask src/mask.c src/bitmask.c $(SDL) $(DEBUG)
bufferproxy src/bufferproxy.c $(SDL) $(DEBUG)
pixelarray src/pixelarray.c $(SDL) $(DEBUG)
"""
 
env = PythonCEBuildEnvironment()
for l in lines.splitlines():
    if l.startswith('#'): continue
    names = l.split(' ')
    fns = ['../' + x for x in names[1:-2]]
    env.PythonExtension("build/%s.pyd" % names[0], fns)
</pre><br /><br />5. 执行scons.py<br /><br />6. 将生成的pyd文件替换到windows版本的pygame中，然后去掉无用的.dll文件，将新的pygame复制到wince的python25/lib下，即可
          <br/>
          <span style="color:red;">
            <a href="http://tailorcai.javaeye.com/blog/189463#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 04 May 2008 17:57:34 +0800</pubDate>
        <link>http://tailorcai.javaeye.com/blog/189463</link>
        <guid>http://tailorcai.javaeye.com/blog/189463</guid>
      </item>
      <item>
        <title>在windows下编译pythonce的扩展模块</title>
        <author>tailorcai</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tailorcai.javaeye.com">tailorcai</a>&nbsp;
          链接：<a href="http://tailorcai.javaeye.com/blog/189348" style="color:red;">http://tailorcai.javaeye.com/blog/189348</a>&nbsp;
          发表时间: 2008年05月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          遵照<br /><a href="http://pythonce.sourceforge.net/Wikka/SConsBuild" target="_blank">http://pythonce.sourceforge.net/Wikka/SConsBuild</a><br />的指示：<br />1. 下载PythonCe source package <a href="http://sourceforge.net/project/downloading.php?group_id=104228&use_mirror=jaist&filename=PythonCE-2.5-20061219-source.zip&10847065" target="_blank">http://sourceforge.net/project/downloading.php?group_id=104228&use_mirror=jaist&filename=PythonCE-2.5-20061219-source.zip&10847065</a><br />2. 下载dev package<a href="http://sourceforge.net/project/downloading.php?group_id=104228&use_mirror=jaist&filename=PythonCE-2.5-20061219-dev.zip&43239646" target="_blank">http://sourceforge.net/project/downloading.php?group_id=104228&use_mirror=jaist&filename=PythonCE-2.5-20061219-dev.zip&43239646</a><br />3. copy 文件...<br /><br />运行：<br />scons.py<br />报告SConstruct文件不存在，原来是原文中的文件名有误，应为SConstruct，而不是SConscript<br />改名后，依然错误。<br /><br />这才发现，cons目前要求eVC4，VC2008不支持<br />只好先安装evc4,sp4,又下载了pocket pc 2003 sdk<br /><br />安装之后，运行，依然出现错误，原因是运行目录没有找到，手工运行evc，到tools->options->directories->execuable 确定就可以了。<br /><br />将build目录下的.pyd文件复制到ce /program files/python2.5/Lib下，测试通过
          <br/>
          <span style="color:red;">
            <a href="http://tailorcai.javaeye.com/blog/189348#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 04 May 2008 14:37:56 +0800</pubDate>
        <link>http://tailorcai.javaeye.com/blog/189348</link>
        <guid>http://tailorcai.javaeye.com/blog/189348</guid>
      </item>
      <item>
        <title>WM5安装ppygui</title>
        <author>tailorcai</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tailorcai.javaeye.com">tailorcai</a>&nbsp;
          链接：<a href="http://tailorcai.javaeye.com/blog/189174" style="color:red;">http://tailorcai.javaeye.com/blog/189174</a>&nbsp;
          发表时间: 2008年05月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          ppygui是一个基于pythonce的界面库，使用了原生的windows控件，并提供了更加符合python规范的API，是用python编写WindowsCE小程序的很好的工具。值得一提的是，ppygui提供了一套简单而方便的layout实现，便于在小屏幕上开发UI。<br /><br />安装的时候发现，在我的SD卡上运行，因为目录中包含中文，安装不成功，copy到机器内容中就可以了。
          <br/>
          <span style="color:red;">
            <a href="http://tailorcai.javaeye.com/blog/189174#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 04 May 2008 09:45:37 +0800</pubDate>
        <link>http://tailorcai.javaeye.com/blog/189174</link>
        <guid>http://tailorcai.javaeye.com/blog/189174</guid>
      </item>
      <item>
        <title>GWT中，访问IFrame中的对象的方法</title>
        <author>tailorcai</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tailorcai.javaeye.com">tailorcai</a>&nbsp;
          链接：<a href="http://tailorcai.javaeye.com/blog/186897" style="color:red;">http://tailorcai.javaeye.com/blog/186897</a>&nbsp;
          发表时间: 2008年04月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          今天修改后台CMS，需要自己创建一个IFrame，并且修改里面的内容。花了不少的时间在测试上，终于找到了一个比较简单的方法：<br /><br />1. 创建：<br />   Frame frame = new Frame("http://www.g.cn")<br /><br />2. JSNI函数：<br />	private static native void setIFrameContent(Element element, String s) /*-{<br />		var e = element.contentWindow.document.getElementById( "id_news");<br />		e.innerHTML = s;<br />	}-*/;<br />   !!! id_news 指向你的对象<br />   !!! 这种调用方法才是可行的，在IE/FF下测试通过的<br /> <br />3. 调用<br />    setIFrameContent( frame.getElement(), "&lt;html>&lt;body>haha&lt;/body>&lt;/html>" );<br /><br />Done
          <br/>
          <span style="color:red;">
            <a href="http://tailorcai.javaeye.com/blog/186897#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Apr 2008 17:53:48 +0800</pubDate>
        <link>http://tailorcai.javaeye.com/blog/186897</link>
        <guid>http://tailorcai.javaeye.com/blog/186897</guid>
      </item>
      <item>
        <title>J2ME网络连接确认的多线程问题</title>
        <author>tailorcai</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tailorcai.javaeye.com">tailorcai</a>&nbsp;
          链接：<a href="http://tailorcai.javaeye.com/blog/185132" style="color:red;">http://tailorcai.javaeye.com/blog/185132</a>&nbsp;
          发表时间: 2008年04月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在修改我的路况信息的小程序的过程中，终于发现一个特别的现象。<br />当弹出连接确认的canvas时，这时，虽然是在网络链接的线程中，但是，同样也会进入显示的paint函数，从而导致循环。<br /><br />即绘图线程 -》 paint -》等待网络线程 -》确认 -》paint<br /><br />后来干脆在paint中判断线程对象，暂时绕开了这个问题。这跟windows下的界面开发可是完全不一样，难以理解的说。还是对j2me缺乏了解啊。
          <br/>
          <span style="color:red;">
            <a href="http://tailorcai.javaeye.com/blog/185132#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 21 Apr 2008 18:22:48 +0800</pubDate>
        <link>http://tailorcai.javaeye.com/blog/185132</link>
        <guid>http://tailorcai.javaeye.com/blog/185132</guid>
      </item>
      <item>
        <title>MyGWT + Fckeditor 的集成</title>
        <author>tailorcai</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tailorcai.javaeye.com">tailorcai</a>&nbsp;
          链接：<a href="http://tailorcai.javaeye.com/blog/181869" style="color:red;">http://tailorcai.javaeye.com/blog/181869</a>&nbsp;
          发表时间: 2008年04月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          MyGWT是我一直在用的框架。虽然功能相对少些，但是整个开发习惯等等都很好，很适合我这个做过多年客户端开发的人。<br /><br />不过MyGWT的界面Layout有个特点，就是layout严格依赖于基于mygwt的派生类。如果中间其它的实现，比如gwt标准的。相应的onResize等事件就进不去了。而我这个项目最早不是基于mygwt，因此，只好先进行改造。<br /><br />mygwt0.4版本中有一个bug，就是RowLayout的尺寸有问题，会导致中间的Row显示不全，不过最新的0.5已经解决了。这样原来用VerticalPanel实现的东东，都可以移植到RowLayout了。<br /><br />fckeditor用的是JWC的实现。不过这个版本的fckeditor的尺寸是在创建的时候设置的，外面包了一个标准的GWT FlowPanel。这就造成了layout的问题。我是这样解决的<br /><pre name="code" class="java">
container = new WidgetContainer();
container.setLayout( new FillLayout());
contentEdit = new MyRichTextArea("","","800px","500px");
container.addListener(Events.Resize, new Listener() {
  public void handleEvent(BaseEvent be) {
    int w = container .getWidth();
    int h = container .getHeight();
    contentEdit.setSize(w + "px" , h + "px");
  }					
});
container.add( contentEdit );
container .layout(true);
</pre><br /><br />另外实现一个自己的fckeditor<br /><pre name="code" class="java">
public class MyRichTextArea extends FCKEditor {

	public MyRichTextArea(String html, String config, String cssWidth,
			String cssHeight) {
		super(html, config, cssWidth, cssHeight);
		// TODO Auto-generated constructor stub
	}

	public void setHTML(String html) {
		if( html == null )
			html = "";
		super.setHTML(html);
	}
	
	public void setSize(String cssWidth, String cssHeight) {
		FlowPanel w = (FlowPanel) this.getWidget();
		Widget iframe = (Widget) w.getWidget(2);
		iframe.setSize(cssWidth, cssHeight);
	}
}
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://tailorcai.javaeye.com/blog/181869#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 11 Apr 2008 17:30:46 +0800</pubDate>
        <link>http://tailorcai.javaeye.com/blog/181869</link>
        <guid>http://tailorcai.javaeye.com/blog/181869</guid>
      </item>
      <item>
        <title>django调整数据库时容易出现的问题</title>
        <author>tailorcai</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tailorcai.javaeye.com">tailorcai</a>&nbsp;
          链接：<a href="http://tailorcai.javaeye.com/blog/181222" style="color:red;">http://tailorcai.javaeye.com/blog/181222</a>&nbsp;
          发表时间: 2008年04月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1 去掉字段后，该字段在数据库中没有缺省值，导致model建立出错<br />2 去掉字段后，要经过两个版本的同步运行，这时，如果去掉的字段在查询条件中，可能导致出现重复的字段。
          <br/>
          <span style="color:red;">
            <a href="http://tailorcai.javaeye.com/blog/181222#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 10 Apr 2008 13:52:08 +0800</pubDate>
        <link>http://tailorcai.javaeye.com/blog/181222</link>
        <guid>http://tailorcai.javaeye.com/blog/181222</guid>
      </item>
      <item>
        <title>给家里的Dell D600装了Ubuntu 7.10</title>
        <author>tailorcai</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tailorcai.javaeye.com">tailorcai</a>&nbsp;
          链接：<a href="http://tailorcai.javaeye.com/blog/180203" style="color:red;">http://tailorcai.javaeye.com/blog/180203</a>&nbsp;
          发表时间: 2008年04月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          先是装了7.04，可是中文老是有问题。后来才知道，需要先update。郁闷。正好重装7.10。还不错，除了字体稍差，其他一切正常。
          <br/>
          <span style="color:red;">
            <a href="http://tailorcai.javaeye.com/blog/180203#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 07 Apr 2008 17:46:02 +0800</pubDate>
        <link>http://tailorcai.javaeye.com/blog/180203</link>
        <guid>http://tailorcai.javaeye.com/blog/180203</guid>
      </item>
      <item>
        <title>基于django0.96的自动测试功能的Login增强</title>
        <author>tailorcai</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tailorcai.javaeye.com">tailorcai</a>&nbsp;
          链接：<a href="http://tailorcai.javaeye.com/blog/178099" style="color:red;">http://tailorcai.javaeye.com/blog/178099</a>&nbsp;
          发表时间: 2008年03月31日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          0.96不支持client对象，先Login再提交数据。因此，参照trunk，改写了Client<br /><pre name="code" class="java">    def login_new(self, **credentials):
        """Set the Client to appear as if it has sucessfully logged into a site.

        Returns True if login is possible; False if the provided credentials
        are incorrect, or the user is inactive, or if the sessions framework is
        not available.
        """
        user = authenticate(**credentials)
        if user and user.is_active and 'django.contrib.sessions' in settings.INSTALLED_APPS:
            #engine = __import__(settings.SESSION_ENGINE, {}, {}, [''])

            # Create a fake request to store login details
            request = HttpRequest()
            #request.session = engine.SessionStore()
            from django.contrib.sessions.middleware import SessionMiddleware
            SessionMiddleware().process_request( request )
            login(request, user)

            obj = Session.objects.get_new_session_object()
            session_key = obj.session_key
            
            # Set the cookie to represent the session
            self.cookies[settings.SESSION_COOKIE_NAME] = session_key
            self.cookies[settings.SESSION_COOKIE_NAME]['max-age'] = None
            self.cookies[settings.SESSION_COOKIE_NAME]['path'] = '/'
            self.cookies[settings.SESSION_COOKIE_NAME]['domain'] = settings.SESSION_COOKIE_DOMAIN
            self.cookies[settings.SESSION_COOKIE_NAME]['secure'] = settings.SESSION_COOKIE_SECURE or None
            self.cookies[settings.SESSION_COOKIE_NAME]['expires'] = None

            # Save the session values
            #request.session.save()
            new_session = Session.objects.save(session_key, request.session._session,
                    datetime.datetime.now() + datetime.timedelta(seconds=settings.SESSION_COOKIE_AGE))

            return True
        else:
            return False</pre>
          <br/>
          <span style="color:red;">
            <a href="http://tailorcai.javaeye.com/blog/178099#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 31 Mar 2008 16:38:17 +0800</pubDate>
        <link>http://tailorcai.javaeye.com/blog/178099</link>
        <guid>http://tailorcai.javaeye.com/blog/178099</guid>
      </item>
      <item>
        <title>ActiveMQ + Python </title>
        <author>tailorcai</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tailorcai.javaeye.com">tailorcai</a>&nbsp;
          链接：<a href="http://tailorcai.javaeye.com/blog/177062" style="color:red;">http://tailorcai.javaeye.com/blog/177062</a>&nbsp;
          发表时间: 2008年03月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          首先试用了pyactivemq，不过这个代码在windows下测试用例都过不去。在linux下可以测试过，但是Durable..的测试程序工作不正常，ActiveMQ总是报无法从store中回复数据。<br /><br />只好试stomp库。这个库的例程有些问题。我改了一下，我希望的功能可以用。<br /><br />listener应该这样写：<br />class MyListener(stomp.ConnectionListener):<br />    def on_error(self, headers, message):<br />        print 'received an error %s' % message<br />        <br />    def on_message(self, headers, message):<br />        print 'received a message %s' % message<br /><br />persist消息应该这样写：<br />conn.send( 'message %d' % sn , destination='/queue/hbtvweb', persistent='true')<br /><br />就可以了
          <br/>
          <span style="color:red;">
            <a href="http://tailorcai.javaeye.com/blog/177062#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 27 Mar 2008 22:53:24 +0800</pubDate>
        <link>http://tailorcai.javaeye.com/blog/177062</link>
        <guid>http://tailorcai.javaeye.com/blog/177062</guid>
      </item>
      <item>
        <title>测试python rpc的性能</title>
        <author>tailorcai</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tailorcai.javaeye.com">tailorcai</a>&nbsp;
          链接：<a href="http://tailorcai.javaeye.com/blog/176321" style="color:red;">http://tailorcai.javaeye.com/blog/176321</a>&nbsp;
          发表时间: 2008年03月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          客户端：<br />import xmlrpclib,time<br />server = xmlrpclib.ServerProxy("http://localhost:8888")<br />for i in range(1,10):<br />    a = time.time()<br />    month = server.getMonth( 2002, i )<br />    month = server.getMonth( 2002, i )<br />    month = server.getMonth( 2002, i )<br />    month = server.getMonth( 2002, i )<br />    month = server.getMonth( 2002, i )<br />    month = server.getMonth( 2002, i )<br />    month = server.getMonth( 2002, i )<br />    month = server.getMonth( 2002, i )<br />    month = server.getMonth( 2002, i )<br />    month = server.getMonth( 2002, i )<br />    b = time.time()<br /><br />    print b-a<br />print month<br /><br />服务器：<br />import calendar, SimpleXMLRPCServer<br />#The server object<br />class Calendar:<br />    def getMonth(self, year, month):<br />        return calendar.month(year, month)<br /><br />    def getYear(self, year):<br />        return calendar.calendar(year)<br />calendar_object = Calendar()<br />server = SimpleXMLRPCServer.SimpleXMLRPCServer(("localhost", 8888))<br />server.register_instance(calendar_object)<br />#Go into the main listener loop<br />print "Listening on port 8888"<br />server.serve_forever()<br /><br />结果：<br />0.077999830246<br />0.0310001373291<br />0.0469999313354<br />0.0310001373291<br />0.0469999313354<br />0.0309998989105<br />0.047000169754<br />0.0469999313354<br />0.0309998989105<br /><br />基本上，每次请求的时间是0.03-0.04s
          <br/>
          <span style="color:red;">
            <a href="http://tailorcai.javaeye.com/blog/176321#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 26 Mar 2008 14:39:28 +0800</pubDate>
        <link>http://tailorcai.javaeye.com/blog/176321</link>
        <guid>http://tailorcai.javaeye.com/blog/176321</guid>
      </item>
      <item>
        <title>[记录]配置jetty</title>
        <author>tailorcai</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tailorcai.javaeye.com">tailorcai</a>&nbsp;
          链接：<a href="http://tailorcai.javaeye.com/blog/165177" style="color:red;">http://tailorcai.javaeye.com/blog/165177</a>&nbsp;
          发表时间: 2008年02月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          把jetty.sh复制到/etc/init.d下<br />在/etc/创建jetty.conf文件，里面指向jetty.xml<br />在/etc/default创建jetty执行文件，里面初始化JETTY_HOME和JAVA_HOME
          <br/>
          <span style="color:red;">
            <a href="http://tailorcai.javaeye.com/blog/165177#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 26 Feb 2008 15:38:05 +0800</pubDate>
        <link>http://tailorcai.javaeye.com/blog/165177</link>
        <guid>http://tailorcai.javaeye.com/blog/165177</guid>
      </item>
      <item>
        <title>用Groovy动态编译的对象作为Drools的Fact遇到的问题</title>
        <author>tailorcai</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tailorcai.javaeye.com">tailorcai</a>&nbsp;
          链接：<a href="http://tailorcai.javaeye.com/blog/127308" style="color:red;">http://tailorcai.javaeye.com/blog/127308</a>&nbsp;
          发表时间: 2007年09月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最近，希望实现将Groovy和Drools结合起来实现，全动态的Model和Rule的实现方案。发现Groovy动态生成的类在Drools中使用有一些兼容性的问题。<br />
<br />
这是我的Unittest:<br />
<br />
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span class="keyword">package</span><span>&nbsp;com.dg;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;groovy.lang.GroovyClassLoader;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;java.io.IOException;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;java.io.StringReader;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;org.drools.RuleBase;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;org.drools.RuleBaseConfiguration;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;org.drools.StatelessSession;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;org.drools.compiler.DroolsParserException;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;org.drools.compiler.PackageBuilder;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;org.drools.compiler.PackageBuilderErrors;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;org.drools.reteoo.ReteooRuleBase;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;org.junit.*;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;DgTest&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">final</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;String&nbsp;ruleCode&nbsp;=&nbsp;</span><span class="string">&quot;package&nbsp;com.test;\n&quot;</span><span>&nbsp;+&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;import&nbsp;com.dg.DgTest;\n&quot;</span><span>&nbsp;+&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;rule&nbsp;\&quot;hello\&quot;\n&quot;</span><span>&nbsp;+&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;&nbsp;&nbsp;when&nbsp;\n&quot;</span><span>&nbsp;+&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;&nbsp;&nbsp;&nbsp;&nbsp;x:&nbsp;DgTest();\n&quot;</span><span>&nbsp;+&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;&nbsp;&nbsp;then&nbsp;\n&quot;</span><span>&nbsp;+&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;&nbsp;&nbsp;&nbsp;&nbsp;x.fire(null);\n&quot;</span><span>&nbsp;+&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;end\n&quot;</span><span>+&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">final</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;String&nbsp;ruleCode1&nbsp;=&nbsp;</span><span class="string">&quot;package&nbsp;com.test;\n&quot;</span><span>&nbsp;+&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;import&nbsp;com.dg.DgTest;\n&quot;</span><span>&nbsp;+&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;import&nbsp;com.test.DynamicModel;\n&quot;</span><span>&nbsp;+&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;rule&nbsp;\&quot;hello\&quot;\n&quot;</span><span>&nbsp;+&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;&nbsp;&nbsp;when&nbsp;\n&quot;</span><span>&nbsp;+&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;&nbsp;&nbsp;&nbsp;&nbsp;d:&nbsp;DynamicModel();\n&quot;</span><span>&nbsp;+&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;&nbsp;&nbsp;&nbsp;&nbsp;x:&nbsp;DgTest();\n&quot;</span><span>&nbsp;+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;&nbsp;&nbsp;then&nbsp;\n&quot;</span><span>&nbsp;+&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;&nbsp;&nbsp;&nbsp;&nbsp;x.fire(d);\n&quot;</span><span>&nbsp;+&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;end\n&quot;</span><span>+&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;</span><span class="keyword">boolean</span><span>&nbsp;fired&nbsp;=&nbsp;</span><span class="keyword">false</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;RuleBase&nbsp;setupRule(ClassLoader&nbsp;cl,&nbsp;String&nbsp;code)&nbsp;{&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.setProperty(<span class="string">&quot;drools.compiler&quot;</span><span>,&nbsp;</span><span class="string">&quot;JANINO&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>(&nbsp;cl&nbsp;!=&nbsp;</span><span class="keyword">null</span><span>&nbsp;)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.currentThread().setContextClassLoader(&nbsp;cl&nbsp;);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PackageBuilder&nbsp;builder&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;PackageBuilder();&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringReader&nbsp;reader&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;StringReader(&nbsp;code&nbsp;);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">try</span><span>&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;builder.addPackageFromDrl(&nbsp;reader&nbsp;);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span class="keyword">catch</span><span>&nbsp;(DroolsParserException&nbsp;e)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span class="keyword">catch</span><span>&nbsp;(IOException&nbsp;e)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>(&nbsp;builder.hasErrors()&nbsp;)&nbsp;{&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PackageBuilderErrors&nbsp;errors&nbsp;=&nbsp;builder.getErrors();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&nbsp;errors&nbsp;);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Assert.assertFalse(&nbsp;builder.hasErrors()&nbsp;);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RuleBaseConfiguration&nbsp;conf&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;RuleBaseConfiguration();&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RuleBase&nbsp;ruleBase&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;ReteooRuleBase(&nbsp;conf&nbsp;);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">try</span><span>&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ruleBase.addPackage(&nbsp;builder.getPackage());&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span class="keyword">catch</span><span>&nbsp;(Exception&nbsp;e)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PackageBuilderErrors&nbsp;errs&nbsp;=&nbsp;builder.getErrors();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">for</span><span>(&nbsp;Object&nbsp;err&nbsp;:&nbsp;errs.getErrors())&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Assert.assertTrue(&nbsp;<span class="keyword">false</span><span>&nbsp;);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;ruleBase;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">void</span><span>&nbsp;runRuleWithObject(&nbsp;RuleBase&nbsp;rule,&nbsp;Object&nbsp;obj)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StatelessSession&nbsp;wm&nbsp;=&nbsp;rule.newStatelessSession();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;objs[]&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;Object[</span><span class="number">2</span><span>];&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objs[<span class="number">0</span><span>]&nbsp;=&nbsp;</span><span class="keyword">this</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objs[<span class="number">1</span><span>]&nbsp;=&nbsp;obj;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wm.execute(objs);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Assert.assertTrue(&nbsp;fired&nbsp;);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">/**</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;simple&nbsp;test</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="annotation">@Test</span><span>&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;drools()&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RuleBase&nbsp;rb&nbsp;=&nbsp;setupRule(<span class="keyword">null</span><span>,&nbsp;ruleCode);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Assert.assertNotNull(&nbsp;rb&nbsp;);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;runRuleWithObject(&nbsp;rb&nbsp;,&nbsp;<span class="keyword">null</span><span>&nbsp;);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">/**</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;groovy&nbsp;dynamic&nbsp;test</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="annotation">@Test</span><span>&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;groovy()&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GroovyClassLoader&nbsp;gcl&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;GroovyClassLoader();&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Assert.assertNotNull(&nbsp;gcl&nbsp;);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class&nbsp;greetingClass&nbsp;=&nbsp;gcl.parseClass(<span class="string">&quot;package&nbsp;com.test;\n&quot;</span><span>&nbsp;+&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;class&nbsp;DynamicModel{\n&quot;</span><span>&nbsp;+&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;}\n&quot;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Assert.assertNotNull(&nbsp;greetingClass&nbsp;);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RuleBase&nbsp;rb&nbsp;=&nbsp;setupRule(gcl,&nbsp;ruleCode1);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">try</span><span>&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;runRuleWithObject(&nbsp;rb&nbsp;,&nbsp;greetingClass.newInstance()&nbsp;);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span class="keyword">catch</span><span>&nbsp;(InstantiationException&nbsp;e)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span class="keyword">catch</span><span>&nbsp;(IllegalAccessException&nbsp;e)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;fire(Object&nbsp;obj)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fired&nbsp;=&nbsp;<span class="keyword">true</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>(&nbsp;obj&nbsp;!=&nbsp;</span><span class="keyword">null</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(obj);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<br />
在使用Groovy动态类时，编译Rule的时候总是报<br />
Rule Compilation error : [Rule name=hello, agendaGroup=MAIN, salience=0, no-loop=false]<br />
&nbsp;&nbsp;&nbsp; com/test/Rule_hello_0.java (3:49) : Only a type can be imported. com.test.DynamicModel resolves to a package<br />
&nbsp;&nbsp;&nbsp; com/test/Rule_hello_0.java (7:231) : com.test.DynamicModel cannot be resolved to a type<br />
<br />
那位能够给些建议呢？
          <br/>
          <span style="color:red;">
            <a href="http://tailorcai.javaeye.com/blog/127308#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 26 Sep 2007 15:11:59 +0800</pubDate>
        <link>http://tailorcai.javaeye.com/blog/127308</link>
        <guid>http://tailorcai.javaeye.com/blog/127308</guid>
      </item>
      <item>
        <title>jboss rules brms和ruleAgent的配合使用</title>
        <author>tailorcai</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tailorcai.javaeye.com">tailorcai</a>&nbsp;
          链接：<a href="http://tailorcai.javaeye.com/blog/108646" style="color:red;">http://tailorcai.javaeye.com/blog/108646</a>&nbsp;
          发表时间: 2007年08月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          这两天，准备把BRMS和运行的工程结合起来，实现从编辑规则到热更新的全套流程。<br />
<br />
首先，从blog中看到官方推出了一个独立版本的BRMS，于是赶紧去download了一个。这个包自带了tomcat，以及一个demo的应用例子。安装很顺利，可以使用起来问题多多。现有的例子好几个地方点击就报错。到tomcat的输出里面一查，报class not found: ruleasset。反复试了多次，都是同样的结果。很失望。也许老外用的是linux版本？算了。<br />
<br />
以前用过jboss AS+BRMS，觉得还是挺稳定的，因此，还是老老实实自己配吧。<br />
<br />
安装JBOSS AS，然后把下载的war放到default/deploy目录下。（曾经想放在minimal,可是发现minimal不支持deploy，本人是个java新手，很多东西边试边用，不过本人解决问题的经验还是挺多的，呵呵，自我吹嘘一下）<br />
<br />
起来以后，试了一下，一切正常。<br />
<br />
为了试用BRMS的全部功能，首先要把model导入进去。可是把自己的model倒进去以后，找不到任何类。人家自带的例子就没有问题。想来想去，后来在log中看到，还是自己的类有问题，因为我使用了scala，因此，还需要scala的库。赶紧把scala.Jar放到jboss的Lib下面.<br />
<br />
BRMS的用法还是要好好研究一下的。不过，整个使用流程还是比较顺畅的。<br />
<br />
解决了编辑的问题之后，需要来解决运行过程中的加载问题。首先搜索到一篇文章，介绍使用方式的。名字叫drools-examples-brms。可是，发现这个例子有很大问题。他使用url的方式下载package。可是分析新的代码库，发现url的方式已经都不支持了。可能是因为url的方式不可控，问题比较多。目前的版本4.0.0只支持目录和文件方式。我的配置如下：<br />
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span>newInstance=</span><span class="keyword">true</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>dir=k:/www/rules&nbsp;&nbsp;</span></li>
    <li class="alt"><span>#file=/com.aaa.models.pkg&nbsp;&nbsp;</span></li>
    <li class=""><span>poll=<span class="number">30</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>name=config&nbsp;&nbsp;</span></li>
</ol>
</div>
然后从BRMS下载package放到目录下。运行测试用例，文件终于找到了，可是在read的时候总是出错，后来发现，是由于我的程序用的drools版本和BRMS的版本不一致。升级后，运行正常。
          <br/>
          <span style="color:red;">
            <a href="http://tailorcai.javaeye.com/blog/108646#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 03 Aug 2007 18:39:45 +0800</pubDate>
        <link>http://tailorcai.javaeye.com/blog/108646</link>
        <guid>http://tailorcai.javaeye.com/blog/108646</guid>
      </item>
      <item>
        <title> 我的第一个Ajax Wicket控件：Google Ajax Image Search (2)  </title>
        <author>tailorcai</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tailorcai.javaeye.com">tailorcai</a>&nbsp;
          链接：<a href="http://tailorcai.javaeye.com/blog/106032" style="color:red;">http://tailorcai.javaeye.com/blog/106032</a>&nbsp;
          发表时间: 2007年07月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          今天，继续介绍我在尝试开发的Google Ajax Image Search控件。<br />
<br />
为了允许用户保存自己选择的图片，Google Search API提供了一个Callback.因此，修改如下代码：<br />
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span>.append(</span><span class="string">&quot;function&nbsp;MyKeepHandler(result)&nbsp;{\n&quot;</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>.append(<span class="string">&quot;\twicketAjaxPost('&quot;</span><span>&nbsp;+&nbsp;getCallbackUrl()&nbsp;+&nbsp;</span><span class="string">&quot;','url='+wicketEncode(result.url)+'&amp;tbUrl='+wicketEncode(result.tbUrl));\n&quot;</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>.append(<span class="string">&quot;}&quot;</span><span>)&nbsp;&nbsp;</span></span></li>
</ol>
</div>
在这段代码中，利用Behavior提供的Callback机制，把js中用户选择的图片的url上传到Behavior。<br />
相应的相应代码如下：<br />
<br />
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span class="annotation">@Override</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">protected</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;respond(AjaxRequestTarget&nbsp;target)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;RequestCycle&nbsp;requestCycle&nbsp;=&nbsp;RequestCycle.get();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;tbUrl&nbsp;=&nbsp;requestCycle.getRequest().getParameter(<span class="string">&quot;tbUrl&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;url&nbsp;=&nbsp;requestCycle.getRequest().getParameter(<span class="string">&quot;url&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;onSelect(&nbsp;url&nbsp;,&nbsp;tbUrl&nbsp;,&nbsp;target&nbsp;);&nbsp;&nbsp;</span></li>
    <li class=""><span>}&nbsp;&nbsp;</span></li>
    <li class=""><span>protected abstract void onSelect(String url , String tbUrl , AjaxRequestTarget target);<br />
    </span></li>
</ol>
</div>
<br />
这里，我引入了一个虚函数，onSelect。通过实现这个函数，页面可以对选择的图片信息进行进一步的处理。在这里，我们先在页面中加入一个列表区域，显示用户选择的所有图片：<br />
<br />
首先修改新的GImageSearch的创建代码。<br />
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span>add(&nbsp;</span><span class="keyword">new</span><span>&nbsp;GImageSearch(</span><span class="string">&quot;gsearch&quot;</span><span>,</span><span class="keyword">null</span><span>)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="annotation">@Override</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">protected</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;onSelect(String&nbsp;url,&nbsp;String&nbsp;tbUrl,&nbsp;AjaxRequestTarget&nbsp;target)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;store&nbsp;it&nbsp;some&nbsp;where?</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;images.add(&nbsp;url&nbsp;);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;imageList.modelChanged();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;target.addComponent(&nbsp;container&nbsp;);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>});&nbsp;&nbsp;</span></li>
</ol>
</div>
<br />
引入了两个变量<br />
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span class="keyword">private</span><span>&nbsp;List<string>&nbsp;&nbsp;&nbsp;&nbsp;images&nbsp;=&nbsp;</string></span><span class="keyword">new</span><span>&nbsp;ArrayList<string>();&nbsp;&nbsp;</string></span></span></li>
    <li class=""><span><span class="keyword">private</span><span>&nbsp;ListView&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;imageList;&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<br />
images保存历史图片。imageList则是一个用来显示list数据的wicket控件。<br />
<br />
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span class="keyword">private</span><span>&nbsp;WebMarkupContainer&nbsp;container;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;container&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;WebMarkupContainer(</span><span class="string">&quot;savedList-panel&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;add(&nbsp;container&nbsp;);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;container.setOutputMarkupId(<span class="keyword">true</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;container.add(&nbsp;imageList&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;ListView(</span><span class="string">&quot;savedImage&quot;</span><span>,&nbsp;images)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="annotation">@Override</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">protected</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;populateItem(ListItem&nbsp;item)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;item.add(&nbsp;<span class="keyword">new</span><span>&nbsp;StaticImage(</span><span class="string">&quot;image&quot;</span><span>,&nbsp;item.getModel()));&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;});&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
</ol>
</div>
<br />
代码注释：<br />
<ol>
    <li>因为，当用户修改图片列表后，需要更新列表显示区域，这就是前面: target.add( container )的含义。通知wicket，本次ajax调用需要更新container对象。</li>
    <li>对于需要ajax更新的对象，必须调用<span>setOutputMarkupId(true)</span></li>
    <li>ListView是一个静态界面对象，重复Render的时候，不会再次访问它的model。因此，必须调用listview.modelChange()。也可以试用RefreshingView等动态repeater界面控件。不过代码会多些。</li>
    <li>这里额外加入了一个container。开始的时候，我直接调用target.add( imageList )，但是得到一个错误提示，对于像listview这样的对象，只能更新他们的包含对象。因此，必须给他们一个通用的包含对象。<br />
    </li>
</ol>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span class="keyword">class</span><span>&nbsp;StaticImage&nbsp;</span><span class="keyword">extends</span><span>&nbsp;WebComponent&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;StaticImage(String&nbsp;id,&nbsp;IModel&nbsp;model)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">super</span><span>(id,&nbsp;model);&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">protected</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;onComponentTag(ComponentTag&nbsp;tag)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;checkComponentTag(tag,&nbsp;<span class="string">&quot;img&quot;</span><span>);&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tag.put(<span class="string">&quot;src&quot;</span><span>,&nbsp;getModelObjectAsString());&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>}&nbsp;&nbsp;&nbsp;</span></li>
</ol>
</div>
<br />
wicket 却省的Image是使用Resource作为url来源。这里copy了一个例子。<a href="http://cwiki.apache.org/WICKET/how-to-load-an-external-image.html">http://cwiki.apache.org/WICKET/how-to-load-an-external-image.html</a><br />
<br />
相应的HTML代码：<br />
<br />
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span>&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">body</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">span</span><span>&nbsp;</span><span class="attribute">wicket:id</span><span>=</span><span class="attribute-value">&quot;gsearch&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">div</span><span>&nbsp;</span><span class="attribute">wicket:id</span><span>=</span><span class="attribute-value">&quot;savedList-panel&quot;</span><span>&nbsp;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="tag">&lt;</span><span class="tag-name">ul</span><span class="tag">&gt;</span><span class="tag">&lt;</span><span class="tag-name">li</span><span>&nbsp;</span><span class="attribute">wicket:id</span><span>=</span><span class="attribute-value">&quot;savedImage&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">img</span><span>&nbsp;</span><span class="attribute">wicket:id</span><span>=</span><span class="attribute-value">&quot;image&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="tag"><!--</span--><span class="tag-name">li</span><span class="tag">&gt;</span><span class="tag"><!--</span--><span class="tag-name">ul</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></span></li>
    <li class="alt"><span><span class="tag"><!--</span--><span class="tag-name">div</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;<span class="tag"><!--</span--><span class="tag-name">body</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
</ol>
</div>
<br />
javaeye贴HTML代码有问题，一旦重复编辑就会乱掉！<br />
<br />
现在可以看一下效果了。
          <br/>
          <span style="color:red;">
            <a href="http://tailorcai.javaeye.com/blog/106032#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 27 Jul 2007 09:41:34 +0800</pubDate>
        <link>http://tailorcai.javaeye.com/blog/106032</link>
        <guid>http://tailorcai.javaeye.com/blog/106032</guid>
      </item>
      <item>
        <title>我的第一个Ajax Wicket控件：Google Ajax Image Search (1)</title>
        <author>tailorcai</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tailorcai.javaeye.com">tailorcai</a>&nbsp;
          链接：<a href="http://tailorcai.javaeye.com/blog/105688" style="color:red;">http://tailorcai.javaeye.com/blog/105688</a>&nbsp;
          发表时间: 2007年07月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最近看到Google发布了新的基于Ajax的图片搜索功能，正好本人在研究Wicket，在网上Google了一下，看到WicketStuff中只有对GoogleMap的支持，因此想自己开发一个，顺便练练手。<br />
<br />
<strong>创建工程和代码框架</strong><br />
首先创建一个Wicket工程，并创建一个页面。我本人用的是Wicket Bench，不过它是针对1.2设计的，而我的库用的是1.3，因此，自动生成的import有问题，需要手工改一下。不过，对于eclipse来说，这是小菜一叠儿啊。然后添加一个wicket component，名字叫GImageSearch。<br />
<br />
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;GImageSearch&nbsp;</span><span class="keyword">extends</span><span>&nbsp;Panel&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;GImageSearch(String&nbsp;id,&nbsp;IModel&nbsp;model)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">super</span><span>(id,&nbsp;model);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;</span></li>
    <li class=""><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<br />
我只实现了这个构造函数，model是用来获得搜索的条件的字符串。现在先不管他，后面会用到。<br />
相应的Html页面<br />
<br />
<font face="Verdana"><br />
</font>
<div class="code_title"><font face="Verdana"><font>xml 代码</font></font></div>
<div class="dp-highlighter">
<div class="bar"><font face="Verdana">&nbsp;</font></div>
<ol class="dp-xml" start="1"><font face="Verdana"><font>
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">html</span><span>&nbsp;xmlns:wicket</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="tag">&lt;</span><span class="tag-name">wicket:panel</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">div</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;searchcontrol&quot;</span><span class="tag">&gt;</span><span>Loading</span><span class="tag"><!--</span--><span class="tag-name"></span></span></span></li>
    </font></font></ol>
    </div>
    <span class="tag"><font face="Verdana"><font></font></font></span><font face="Verdana"><br />
    <wicket:panel> </wicket:panel></font>            <strong>加入Ajax支持</strong><br />
    由于要用到Ajax，因此参考了一下AjaxEditableLabel的例子。对于模块化的Wicket来说，引入Ajax涉及到几个问题：<br />
    1.&nbsp; 额外的js文件的引入，一般是在Head中。<br />
    2. 对当前component的html的动态修改。<br />
    3. Ajax回调到Server。<br />
    <br />
    对这些问题，Wicket都有很好的解决方案。<br />
    <br />
    <strong>实现AjaxBehavior</strong><br />
    首先创建一个内部类：<br />
    <font face="Verdana">
    <div class="code_title"><font>java 代码</font></div>
    <div class="dp-highlighter">
    <div class="bar">&nbsp;</div>
    <ol class="dp-j" start="1"><font>
        <li class="alt"><span><span class="keyword">protected</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;SearchAjaxBehavior&nbsp;</span><span class="keyword">extends</span><span>&nbsp;AbstractDefaultAjaxBehavior&nbsp;{&nbsp;&nbsp;</span></span></li>
        <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="annotation">@Override</span><span>&nbsp;&nbsp;</span></span></li>
        <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;renderHead(IHeaderResponse&nbsp;response)&nbsp;{&nbsp;&nbsp;</span></span></li>
        <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
        <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="annotation">@Override</span><span>&nbsp;&nbsp;</span></span></li>
        <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">protected</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;respond(AjaxRequestTarget&nbsp;target)&nbsp;{&nbsp;&nbsp;</span></span></li>
        <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
        <li class=""><span>}&nbsp;&nbsp;</span></li>
        </font></ol>
        </div>
        </font><br />
        <br />
        在构造函数后面加入一行：<br />
        <font face="Verdana">
        <div class="code_title"><font>java 代码</font></div>
        <div class="dp-highlighter">
        <div class="bar">&nbsp;</div>
        <ol class="dp-j" start="1"><font>
            <li class="alt"><span><span>add(&nbsp;</span><span class="keyword">new</span><span>&nbsp;SearchAjaxBehavior());&nbsp;&nbsp;</span></span></li>
            </font></ol>
            </div>
            <br />
            <br />
            这样当Component被加入到页面中的时候，会自动调用renderHead完成对HTML-Head的扩充。<br />
            加入代码（完全照抄Google的例子）：<br />
            </font>
            <div class="code_title">java 代码</div>
            <div class="dp-highlighter">
            <div class="bar">&nbsp;</div>
            <ol class="dp-j" start="1">
                <li class="alt"><span><span class="annotation">@Override</span><span>&nbsp;&nbsp;</span></span></li>
                <li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;renderHead(IHeaderResponse&nbsp;response)&nbsp;{&nbsp;&nbsp;</span></span></li>
                <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;response.renderCSSReference(<span class="string">&quot;http://www.google.com/uds/css/gsearch.css&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
                <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;response.renderJavascriptReference(<span class="string">&quot;http://www.google.com/uds/api?file=uds.js&amp;v=1.0&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
                <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
                <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;StringBuffer&nbsp;buffer&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;StringBuffer(</span><span class="string">&quot;&quot;</span><span>)&nbsp;&nbsp;</span></span></li>
                <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;.append(<span class="string">&quot;function&nbsp;initGSearch()&nbsp;{\n&quot;</span><span>)&nbsp;&nbsp;</span></span></li>
                <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;.append(<span class="string">&quot;\tvar&nbsp;searchControl&nbsp;=&nbsp;new&nbsp;GSearchControl();\n&quot;</span><span>)&nbsp;&nbsp;</span></span></li>
                <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;.append(<span class="string">&quot;\tsearchControl.setOnKeepCallback(this,&nbsp;MyKeepHandler);\n&quot;</span><span>)&nbsp;&nbsp;</span></span></li>
                <li class="alt"><span>&nbsp;&nbsp;&nbsp; .append(<span class="string">&quot;\tsearchControl.addSearcher(new&nbsp;GimageSearch());\n&quot;</span><span>)&nbsp;&nbsp;</span></span></li>
                <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;.append(<span class="string">&quot;\tsearchControl.draw(document.getElementById(\&quot;&quot;</span><span>&nbsp;+&nbsp;</span><span class="string">&quot;searchcontrol&quot;</span><span>&nbsp;+&nbsp;</span><span class="string">&quot;\&quot;));\n&quot;</span><span>)&nbsp;&nbsp;</span></span></li>
                <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;.append(<span class="string">&quot;}\n&quot;</span><span>)&nbsp;&nbsp;</span></span></li>
                <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;.append(<span class="string">&quot;\tfunction&nbsp;MyKeepHandler(result)&nbsp;{\n&quot;</span><span>)&nbsp;&nbsp;</span></span></li>
                <li class=""><span>&nbsp;&nbsp;&nbsp; .append(<span class="string">&quot;}&quot;</span><span>)&nbsp;&nbsp;</span></span></li>
                <li class=""><span>&nbsp;&nbsp;&nbsp; .append(<span class="string">&quot;GSearch.setOnLoadCallback(initGSearch);\n&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
                <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;response.renderJavascript(buffer.toString(),&nbsp;<span class="string">&quot;gsearch-init&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
                <li class=""><span>}&nbsp; <br />
                </span></li>
            </ol>
            </div>
            <font face="Verdana"> <font face="Verdana"><br />
            现在可以看一下效果了：别忘了加上WebPage的代码，很简单的：<br />
            </font></font>
            <div class="code_title"><font face="Verdana"><font face="Verdana"><font>java 代码</font></font></font></div>
            <font face="Verdana"><font face="Verdana">            </font></font>
            <div class="dp-highlighter"> <font face="Verdana"><font face="Verdana">            </font></font>
            <div class="bar"><font face="Verdana"><font face="Verdana">&nbsp;</font></font></div>
            <font face="Verdana"><font face="Verdana">            </font></font>
            <ol class="dp-j" start="1"><font face="Verdana"><font face="Verdana"><font>
                <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;ImageTest&nbsp;</span><span class="keyword">extends</span><span>&nbsp;WebPage&nbsp;{&nbsp;&nbsp;</span></span></li>
                <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;ImageTest()&nbsp;{&nbsp;&nbsp;</span></span></li>
                <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add(&nbsp;<span class="keyword">new</span><span>&nbsp;GImageSearch(</span><span class="string">&quot;gsearch&quot;</span><span>,</span><span class="keyword">null</span><span>));&nbsp;&nbsp;</span></span></li>
                <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
                <li class="alt"><span>}&nbsp;&nbsp;</span></li>
                </font></font></font></ol>
                <font face="Verdana"><font face="Verdana">                </font></font></div>
                <font face="Verdana"><font face="Verdana">                 </font></font>
                <div class="code_title"><font face="Verdana"><font face="Verdana"><font><font>html 代码(JavaEye贴入html代码好像有问题,哪位告诉一下如何贴？）</font></font></font></font></div>
                <font face="Verdana"><font face="Verdana">                </font></font>
                <div class="dp-highlighter"> <font face="Verdana"><font face="Verdana">                </font></font>
                <div class="bar"><font face="Verdana"><font face="Verdana">&nbsp;</font></font></div>
                <font face="Verdana"><font face="Verdana">                </font></font>
                <ol class="dp-xml" start="1"><font face="Verdana"><font face="Verdana"><font><font>
                    <li class="alt"><span><span></span></span></li>
                    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;<span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
                    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">html</span><span>&nbsp;</span><span class="attribute">xmlns</span><span>=</span><span class="attribute-value">&quot;http://www.w3.org/1999/xhtml&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
                    <li class=""><span>&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">head</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
                    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">meta</span><span>&nbsp;</span><span class="attribute">http-equiv</span><span>=</span><span class="attribute-value">&quot;content-type&quot;</span><span>&nbsp;</span><span class="attribute">content</span><span>=</span><span class="attribute-value">&quot;text/html;&nbsp;charset=utf-8&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
                    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">title</span><span class="tag">&gt;</span><span>Hello&nbsp;World&nbsp;-&nbsp;Google&nbsp;AJAX&nbsp;Search&nbsp;API&nbsp;Sample</span><span class="tag"><!--</span--><span class="tag-name">title</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
                    <li class="alt"><span>&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">head</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
                    <li class=""><span>&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">body</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
                    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">span</span><span>&nbsp;</span><span class="attribute">wicket:id</span><span>=</span><span class="attribute-value">&quot;gsearch&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
                    <li class=""><span>&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">body</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
                    <li class="alt"><span><span class="tag"><!--</span--><span class="tag-name">html</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
                    </font></font></font></font></ol>
                    <font face="Verdana"><font face="Verdana">                    </font></font></div>
                    <font face="Verdana"><font face="Verdana">                    <br />
                    接下来，我们要将用户喜欢的图片信息保存到服务器。To be continued...<br />
                    </font></font>
          <br/>
          <span style="color:red;">
            <a href="http://tailorcai.javaeye.com/blog/105688#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 26 Jul 2007 10:07:00 +0800</pubDate>
        <link>http://tailorcai.javaeye.com/blog/105688</link>
        <guid>http://tailorcai.javaeye.com/blog/105688</guid>
      </item>
  </channel>
</rss>