<?xml version="1.0" encoding="UTF-8"?>
  <feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html"><![CDATA[专注于Flash RIA与网络游戏开发]]></title>
  <subtitle type="html"><![CDATA[弃天笑的小窝]]></subtitle>
  <id>http://www.sujun.org/</id> 
  <link rel="alternate" type="text/html" href="http://www.sujun.org/" /> 
  <link rel="self" type="application/atom+xml" href="http://www.sujun.org/atom.asp" /> 
  <generator uri="http://www.pjhome.net/" version="2.4.1022">PJBlog2</generator> 
  <updated>2010-03-07T23:40:40+08:00</updated> 

  <entry>
	  <title type="html"><![CDATA[[感悟]不止技术了]]></title>
	  <author>
		 <name>弃天笑</name>
		 <uri>http://www.sujun.org/</uri>
		 <email>sujun10@21cn.com</email>
	  </author>
	  <category term="" scheme="http://www.sujun.org/default.asp?cateID=11" label="Blog信息" /> 
	  <updated>2010-03-07T23:40:40+08:00</updated>
	  <published>2010-03-07T23:40:40+08:00</published>
		  <summary type="html"><![CDATA[很长一段时间没写过blog，可能是因为自己懒，又或者是因为很忙...<br/>不过去年下半年也确实很忙。不过现在更忙，因为mmorpg项目终于上线公测了.<br/>现在公司也熬过了最艰难的时期了，项目做出来了，也有了稳定架构可以持续地开发。而且最主要的事，又有一大笔投资注入到公司（记得去年年底的时候还好险，预算只到今年年初，那时候大家是拼了命，加班熬夜做项目，修改每一个需要注意的时候，甚至为了一个效果，只因为要吸引投资商的注意，当时也走了不少弯路以及一些无用功）。<br/>在公司强有力的美术表现之下，我相信这个项目会有更好的发展.<br/>随着公司的开发团队人员的增多了，我负责的大部分东西也慢慢地有其他人接手，解放我这个劳动力，可以去做一些更深层的东西以及做一些重构和优化等等。（前期人少，我是负责架构兼主力开发人员之一，这个时候的主程也算是主力开发人员：（&nbsp;&nbsp;）<br/><br/>我想我接着可以写下很多东西了，rpg，横版，格斗？游戏架构？资源管理？网络交互？性能优化？图形处理？等等<br/>我想会有很多很多，但是我想我改变最大的，应该不是主要关于技术方面的，更是其他方面，例如各部门合作，问题的产生和解决...只一年以来的积累和学习，让我成长了不少。<br/>我想的blog也会改变文风，会出现我个人的一些观点的罗嗦啦<br/><br/>嗷嗷~我要加油！记录自己的点滴<br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.sujun.org/default.asp?id=47" /> 
	  <id>http://www.sujun.org/default.asp?id=47</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[Cinnamon基于AS3项目的例子]]></title>
	  <author>
		 <name>弃天笑</name>
		 <uri>http://www.sujun.org/</uri>
		 <email>sujun10@21cn.com</email>
	  </author>
	  <category term="" scheme="http://www.sujun.org/default.asp?cateID=21" label="Flash/Flex框架" /> 
	  <updated>2009-03-22T07:47:55+08:00</updated>
	  <published>2009-03-22T07:47:55+08:00</published>
		  <summary type="html"><![CDATA[有些朋友会说Cinnamon的测试例子有点难搭起，过程遇到的问题比较多。所以在我就放上一个基于AS3项目工程的例子，过一阵再把后台基于Spring的例子放出来。<br/>大家做例子前，建议先仔细看看官方的说明，非常详细。我也是看它做的，这里我就简单说了<br/>现在先简单说说，基本上，客户端的remoting服务类，是采用ant根据服务端的接口生成的。下面是配置文件<br/><img src="http://www.sujun.org/attachments/month_0903/t200932273428.jpg" border="0" alt=""/><br/>现在我的服务器有一个接口CounterService和他的实现类CounterServiceImpl<br/>那么根据这个配置文件则会生成同样的as：CounterService.as和CounterServiceImpl.as<br/>（要注意一点的是，需要把generatorTemplates目录复制到项目里面，或者自己去配置路径，增加了模板才能够生成客户端文件的）<br/>CounterServiceImpl.java比较简单<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>package&nbsp;example;<br/><br/>public&nbsp;class&nbsp;CounterServiceImpl&nbsp;implements&nbsp;CounterService<br/>{<br/>&#160;&#160;&#160;&#160;private&nbsp;int&nbsp;counter&nbsp;=&nbsp;0;<br/>&#160;&#160;&#160;&#160;public&nbsp;int&nbsp;getNextValue&nbsp;()&nbsp;<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.out.println(&#34;调用了getNextValue方法&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&nbsp;++counter;<br/>&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;public&nbsp;void&nbsp;reset&nbsp;()&nbsp;<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.out.println(&#34;清楚原有数据eset&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;counter&nbsp;=&nbsp;0;<br/>&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;public&nbsp;TestVo&nbsp;sendVo(TestVo&nbsp;vo)<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;vo.setName(&#34;服务器返回:&#34;&nbsp;+&nbsp;vo.getName());<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;vo.setName(&#34;服务器返回:&#34;&nbsp;+&nbsp;vo.getPath());<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&nbsp;vo;<br/>&#160;&#160;&#160;&#160;}<br/>}<br/><br/></div></div><br/>客户端使用就比较简单了，建立一个ServiceInitializer来初始化services<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>public&nbsp;function&nbsp;cr&#101;ateService&nbsp;(url:String,&nbsp;errorHandler:Function)&nbsp;:&nbsp;CounterService&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;channel:ServiceChannel&nbsp;=&nbsp;new&nbsp;NetConnectionServiceChannel();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;channel.serviceUrl&nbsp;=&nbsp;url;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;channel.timeout&nbsp;=&nbsp;5000;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//实例化一个网络服务器，如果有多种服务，就需要实例多个<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;counter:CounterService&nbsp;=&nbsp;new&nbsp;CounterServiceImpl();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//这里是的服务名称是和要服务器对应的<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;channel.cr&#101;ateProxy(&#34;counter&#34;,&nbsp;counter);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;channel.addEventListener(ServiceEvent.ERROR,&nbsp;errorHandler);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;counter;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/></div></div><br/>再来就是主类调用了<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>package&nbsp;{<br/>&#160;&#160;&#160;&#160;import&nbsp;example.CounterService;<br/>&#160;&#160;&#160;&#160;import&nbsp;example.ServiceInitializer;<br/>&#160;&#160;&#160;&#160;import&nbsp;example.TestVo;<br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;import&nbsp;flash.display.Sprite;<br/>&#160;&#160;&#160;&#160;import&nbsp;flash.net.registerClassAlias;<br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;import&nbsp;o&#114;g.spicefactory.cinnamon.client.ErrorMessage;<br/>&#160;&#160;&#160;&#160;import&nbsp;o&#114;g.spicefactory.cinnamon.client.ServiceEvent;<br/><br/>&#160;&#160;&#160;&#160;/**<br/>&#160;&#160;&#160;&#160;&nbsp;*&nbsp;基于as项目测试Cinnamon&nbsp;<br/>&#160;&#160;&#160;&#160;&nbsp;*&nbsp;@author&nbsp;Soda.Chen<br/>&#160;&#160;&#160;&#160;&nbsp;*&nbsp;@link&nbsp;www.sodaChen.com<br/>&#160;&#160;&#160;&#160;&nbsp;*&nbsp;<br/>&#160;&#160;&#160;&#160;&nbsp;*/&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;public&nbsp;class&nbsp;Cinnamon&nbsp;extends&nbsp;Sprite<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;var&nbsp;service:CounterService;<br/><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;public&nbsp;function&nbsp;Cinnamon()<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;registerClassAlias(&#34;model::TestVo&#34;,TestVo);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;si:ServiceInitializer&nbsp;=&nbsp;new&nbsp;ServiceInitializer();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;url:String&nbsp;=&nbsp;&#34;<a href="http://localhost:8080/Cinnamon/service/" target="_blank">http://localhost:8080/Cinnamon/service/</a>&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service&nbsp;=&nbsp;si.cr&#101;ateService(url,&nbsp;errorHandler);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//测试服务器的getNextValue方法<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service.getNextValue().addResultHandler(onNextValue);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//发送一个VO到服务器<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;vo:TestVo&nbsp;=&nbsp;new&nbsp;TestVo();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vo.name&nbsp;=&nbsp;&#34;soda&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vo.path&nbsp;=&nbsp;&#34;www.sodaChen.com&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service.sendVo(vo).addResultHandler(onSendVo);<br/><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;function&nbsp;onSendVo(vo:TestVo):void<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;trace(&#34;vo.name:&#34;&nbsp;+&nbsp;vo.name);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;trace(&#34;vo.name:&#34;&nbsp;+&nbsp;vo.path);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;function&nbsp;onNextValue&nbsp;(nextValue:uint)&nbsp;:&nbsp;void&nbsp;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;trace(&#34;-------nextValue------:&#34;&nbsp;+&nbsp;nextValue);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;function&nbsp;errorHandler&nbsp;(event:ServiceEvent)&nbsp;:&nbsp;void&nbsp;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;error:ErrorMessage&nbsp;=&nbsp;event.response.result&nbsp;as&nbsp;ErrorMessage;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trace(&#34;-----ERROR----:&#34;&nbsp;+&nbsp;error.message);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/></div></div><br/>最后输出结果是:<br/>-------nextValue------:1<br/>vo.name:服务器返回:www.sodaChen.com<br/>vo.name:www.sodaChen.com<br/><br/>最后奉上客户端和服务端的源代码。把服务端的web放到tomcat目录下，再启动客户端工程连接，就OK啦<br/>（包含了jar，所以文件比较打，有5.2MB）<br/><img src="http://www.sujun.org/images/download.gif" alt="下载文件" style="margin:0px 2px -4px 0px"/> <a href="http://www.sujun.org/attachments/month_0903/v200932274743.rar" target="_blank">点击下载此文件</a><br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.sujun.org/default.asp?id=46" /> 
	  <id>http://www.sujun.org/default.asp?id=46</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[cinnamon请求服务错误]]></title>
	  <author>
		 <name>弃天笑</name>
		 <uri>http://www.sujun.org/</uri>
		 <email>sujun10@21cn.com</email>
	  </author>
	  <category term="" scheme="http://www.sujun.org/default.asp?cateID=16" label="出错解决档案" /> 
	  <updated>2009-03-22T07:14:27+08:00</updated>
	  <published>2009-03-22T07:14:27+08:00</published>
		  <summary type="html"><![CDATA[测试了一下以前写的cinnamon例子，修改了一下配置文件。突然发现例子连接不上服务器了。<br/>突然如下的提示<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>-----ERROR----:Unknown&nbsp;service:&nbsp;counter&nbsp;-&nbsp;request&nbsp;info:&nbsp;Request<br/>&nbsp;service&nbsp;name&nbsp;=&nbsp;counter<br/>&nbsp;operation&nbsp;name&nbsp;=&nbsp;getNextValue<br/>&nbsp;parameter&nbsp;types&nbsp;=&nbsp;[]<br/></div></div><br/>很明显是找不到网络服务器<br/><br/>这里也指出了&nbsp;&nbsp;service&nbsp;name&nbsp;=&nbsp;counter<br/><br/>看了一下配置文件，原来是这样配置的<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>&nbsp;&lt;service&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name=&#34;CounterService&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;factory-ref=&#34;pojo&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service-interface=&#34;example.CounterService&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service-implementation=&#34;example.CounterServiceImpl&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scope=&#34;session&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&gt;<br/></div></div><br/>发现服务名是CounterService<br/>修改回counter，正常连接<br/>回头把测试代码放上]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.sujun.org/default.asp?id=45" /> 
	  <id>http://www.sujun.org/default.asp?id=45</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[[Flex]类似Google搜索提示的两种做法]]></title>
	  <author>
		 <name>弃天笑</name>
		 <uri>http://www.sujun.org/</uri>
		 <email>sujun10@21cn.com</email>
	  </author>
	  <category term="" scheme="http://www.sujun.org/default.asp?cateID=19" label="Flex" /> 
	  <updated>2009-02-28T23:11:08+08:00</updated>
	  <published>2009-02-28T23:11:08+08:00</published>
		  <summary type="html"><![CDATA[做了个简单的搜索提示程序，类似google之类的搜索提示，就是输入一个内容时，会把开头对得上的内容显示出来。下面可以测试看看：<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/flash.gif" alt="" style="margin:0px 2px -3px 0px" border="0"/>Flash动画</div><div class="UBBContent"><a id="temp48513_href" href="http://www.sujun.org/javascript:MediaShow('swf','temp48513','attachments/month_0902/r200922822575.swf','400','300')"><img name="temp48513_img" src="http://www.sujun.org/images/mm_snd.gif" style="margin:0px 3px -2px 0px" border="0" alt=""/><span id="temp48513_text">在线播放</span></a><div id="temp48513"></div></div></div><br/>呵呵，这里没有显示有多少条结果，当然也要做到统计也是可以的。这里只做简单的显示。<br/>下面就说说两种做法。<br/>第一种，是在用户输入提示信息的时候，把用户输入的信息跟应用中存的数据进行比较，找出匹配的数据，然后&nbsp;在list组件里显示出来<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//输入文本内容变化事件<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;function&nbsp;inputChangeEvent():void<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//每次输入文字变化，都检索一下，查看数据是否变化<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(currMsg&nbsp;!=&nbsp;searchText.text)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;currMsg&nbsp;=&nbsp;searchText.text;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;seachData:ArrayCollection&nbsp;=&nbsp;new&nbsp;ArrayCollection();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(currMsg&nbsp;!=&nbsp;&#34;&#34;)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//在这里分析所有的内容，找出符合的内容<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;for(var&nbsp;i:int&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;source.length;&nbsp;i++)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//逐个检索,是否具有输入的内容，有则存放进去<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(source[i].label.indexOf(currMsg)&nbsp;==&nbsp;0)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;seachData.addItem(source[i]);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//显示是否有相关的搜索相关信息,如果没有就显示默认信息<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(seachData.length&nbsp;==&nbsp;0)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;seachData&nbsp;=&nbsp;defaultData;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//显示出与搜索相关的信息<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;searchMsgList.visible&nbsp;=&nbsp;true;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;searchMsgList.dataProvider&nbsp;=&nbsp;seachData;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/></div></div><br/>恩，该函数是当输入文本框的内容有变化时触发的。代码的注释已经相当清晰了<br/><br/>接下来看另外一种处理发方法。其实大体的都差不多，这里只是对数据源刚传进来的时候，就马上对数据进行分析，归类，逐个分析，把具有相同内容的数据存放在一个数组里，最后把这些数据都和搜索内容捆绑，存放到一个集合里。所以当用户录入信息时，直接根据输入内容那分类好的数组就可以了<br/>下面是传输数据源时的代码<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/**<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;*&nbsp;设置需要搜索的内容<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;*&nbsp;@param:内容数组<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;*/&nbsp;&nbsp;&nbsp;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;public&nbsp;function&nbsp;setSearchDatas(source:Array):void<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//这里是数据一传递进来，就开始做分析<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//对这里里面的所有数据进行检索分类，以方便输入查询<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;for(var&nbsp;i:int&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;source.length;&nbsp;i++)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;key:String&nbsp;=&nbsp;source[i].label;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//对字符串长度进行检索,并且分析，对每一个字符组合都存放起来<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;for(var&nbsp;j:int&nbsp;=&nbsp;1;&nbsp;j&nbsp;&lt;=&nbsp;key.length;&nbsp;j++)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;str:String&nbsp;=&nbsp;key.substring(0,j);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//从存放有相同标题的集合中取出来<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;strAry:ArrayCollection&nbsp;=&nbsp;searchMap[str]&nbsp;as&nbsp;ArrayCollection;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(strAry&nbsp;==&nbsp;null)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;strAry&nbsp;=&nbsp;new&nbsp;ArrayCollection();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;searchMap[str]&nbsp;=&nbsp;strAry;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//存放完整的对象<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;strAry.addItem(source[i]);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>/code]<br/>然后下面是用户输入信息有变化时的相应函数<br/>[code]<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//输入文本内容变化事件<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;function&nbsp;inputChangeEvent():void<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//每次输入文字变化，都检索一下，查看数据是否变化<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(currMsg&nbsp;!=&nbsp;searchText.text&nbsp;&amp;&amp;&nbsp;currMsg&nbsp;!=&nbsp;&#34;&#34;)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;currMsg&nbsp;=&nbsp;searchText.text;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//显示是否有相关的搜索相关信息,如果没有就显示默认信息<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;strAry:ArrayCollection&nbsp;=&nbsp;searchMap[currMsg]&nbsp;as&nbsp;ArrayCollection;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(strAry&nbsp;==&nbsp;null)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;strAry&nbsp;=&nbsp;defaultData;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//显示出与搜索相关的信息<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;searchMsgList.visible&nbsp;=&nbsp;true;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;searchMsgList.dataProvider&nbsp;=&nbsp;strAry;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/></div></div><br/><br/>最后总结一下，如果少量数据的话，应该都没什么区别。但是，如果有大量数据时，区别就来了。<br/>第一方法比较简单，消耗的内存比较少，但是因为是即时分析数据源，所以搜索出来可能会稍微慢点。<br/>第二种的话，因为实现已经分析好了，可以根据用户输入的内容马上从哈希表里取出对应数据。所以取数据反应会非常快。但是占用内存可能会多点（因为要根据每个字符串组合进行存放，不过其实也是增加多一些字符串，对象只是引用而已）。<br/>同时还做一些细的优化，例如限制长度等等，至于怎么用，根据爱好了。如果数据量大的话，个人偏向第二种。这里的两种算法其实跟具体的CS3或者flex组件不相关的，只是用list来显示而已。<br/>呵呵，当然如果你有更好的想法，欢迎讨论。<br/><br/>源文件：<br/><img src="http://www.sujun.org/images/download.gif" alt="下载文件" style="margin:0px 2px -4px 0px"/> <a href="http://www.sujun.org/attachments/month_0902/12009228232018.rar" target="_blank">点击下载此文件</a><br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.sujun.org/default.asp?id=44" /> 
	  <id>http://www.sujun.org/default.asp?id=44</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[[Java]Hibernate保存或者更新VO遇到same identifier value问题]]></title>
	  <author>
		 <name>弃天笑</name>
		 <uri>http://www.sujun.org/</uri>
		 <email>sujun10@21cn.com</email>
	  </author>
	  <category term="" scheme="http://www.sujun.org/default.asp?cateID=16" label="出错解决档案" /> 
	  <updated>2009-02-17T22:28:22+08:00</updated>
	  <published>2009-02-17T22:28:22+08:00</published>
		  <summary type="html"><![CDATA[最近在使用到了hibernate更新一个VO遇到了这个问题<br/>a&nbsp;different&nbsp;object&nbsp;with&nbsp;the&nbsp;same&nbsp;identifier&nbsp;value&nbsp;was&nbsp;already&nbsp;associated&nbsp;with&nbsp;the&nbsp;session<br/>当<br/>session.up&#100;ate(vo);<br/>就提示上面的错误。是Nhibernate里头，在同一个Session里，数据库的一条记录，只能对应一个引用。如果程序中有其他的对象（这个对象不是由这个Session&nbsp;从数据库取得的，叫脱管实体，和Session中某一对象的数据库标识符相同）由这个Session保存。就会报这个错，目的在于保证不出现不一致读的问题。<br/><br/>仔细想了一下也是，因为数据是从Flex客户端传过去的，我是修改用户数据，之前用这个用户数据登陆了。<br/>知道了问题所在，只要清楚掉session的一些数据就没问题了<br/>session.clear();<br/>使用了这个方法后再更新数据，成功解决问题。<br/><br/>后来再网上搜索一下，发现很多人也提出了问题。下面是一个人的总结<br/><a target="_blank" href="http://blog.csdn.net/piggerman/archive/2008/08/21/2804556.aspx">http://blog.csdn.net/piggerman/archive/2008/08/21/2804556.aspx</a><br/><br/>最后他所的几种方法：<br/>Hibernate&nbsp;疑难异常及处理<br/><br/>1、a&nbsp;different&nbsp;object&nbsp;with&nbsp;the&nbsp;same&nbsp;identifier&nbsp;value&nbsp;was&nbsp;already&nbsp;associated&nbsp;with&nbsp;the&nbsp;session。<br/><br/>　　错误原因：在hibernate中同一个session里面有了两个相同标识但是是不同实体。<br/><br/>　　解决方法一：session.clean()<br/><br/>　　PS：如果在clean操作后面又进行了saveOrUp&#100;ate(object)等改变数据状态的操作，有可能会报出&#34;Found&nbsp;two&nbsp;representations&nbsp;of&nbsp;same&nbsp;collection&#34;异常。<br/><br/>　　解决方法二：session.refresh(object)<br/><br/>　　PS：当object不是数据库中已有数据的对象的时候，不能使用session.refresh(object)因为该方法是从hibernate的&nbsp;session中去重新取object，如果session中没有这个对象，则会报错所以当你使用saveOrUp&#100;ate(object)之前还需要判断一下。<br/><br/>　　解决方法三：session.merge(object)<br/><br/>　　PS：Hibernate里面自带的方法，推荐使用。<br/><br/>2、Found&nbsp;two&nbsp;representations&nbsp;of&nbsp;same&nbsp;collection<br/><br/>　　错误原因：见1。<br/><br/>　　解决方法：session.merge(object)<br/><br/>以上两中异常经常出现在一对多映射和多对多映射中<br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.sujun.org/default.asp?id=43" /> 
	  <id>http://www.sujun.org/default.asp?id=43</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[[AS3]Cinnamon远程方法调用参数错误]]></title>
	  <author>
		 <name>弃天笑</name>
		 <uri>http://www.sujun.org/</uri>
		 <email>sujun10@21cn.com</email>
	  </author>
	  <category term="" scheme="http://www.sujun.org/default.asp?cateID=16" label="出错解决档案" /> 
	  <updated>2009-01-19T22:22:57+08:00</updated>
	  <published>2009-01-19T22:22:57+08:00</published>
		  <summary type="html"><![CDATA[因为有点大意，远程调用方法的时候，在客户端发送时写错了一个参数造成的错误。<br/>主要是因为远程服务那边新增一个方法，所以客户端对应的方法不是用工具生成的，自己手工写时写错。<br/>是这样，远程的方法是这个<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>public&nbsp;boolean&nbsp;addMoreVo(AfficheVo&nbsp;afficheVo,&nbsp;ArrayList&lt;RoomVo&gt;&nbsp;roomVos);<br/></div></div><br/><br/>然后客户端的对应的实现类写新方法的时候写成了这样<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>public&nbsp;function&nbsp;addMoreVo(afficheVo:AfficheVo,&nbsp;roomVos:Array):ServiceRequest<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&nbsp;cinnamon::getOperation(&#34;addMoreVo&#34;).execute([AfficheVo,&nbsp;roomVos]);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/></div></div><br/>注意execute方法的AfficheVo参数，这样写的后果是提示下面的错误信息：<br/><br/>ERROR:No&nbsp;suitable&nbsp;service&nbsp;method&nbsp;for&nbsp;request:&nbsp;Request<br/>&nbsp;service&nbsp;name&nbsp;=&nbsp;HandlerVoServices<br/>&nbsp;operation&nbsp;name&nbsp;=&nbsp;addMoreVo<br/>&nbsp;parameter&nbsp;types&nbsp;=&nbsp;[java.util.HashMap,java.util.ArrayList]<br/><br/>提示服务器没有addMoreVo这个方法，起初觉得很奇怪，以为是没更新到，确定了一下不是。<br/>看它这里提示应该是参数错误，java.util.HashMap，这里于服务器对应的AfficheVo不一样，一直觉得很奇怪，怎么会出现这个错误呢？<br/><br/>我客户端传的是一个VO，而不是一个Object，怎么会和服务器的MAP对应呢？<br/><br/>不过参数错误，造成远程方法调用是肯定的，仔细检查了几遍，才发现客户端这里<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>cinnamon::getOperation(&#34;addMoreVo&#34;).execute([AfficheVo,&nbsp;roomVos]);<br/></div></div><br/>竟然在需要传vo实例的地方，竟然直接传了class了（AfficheVo是一个class），<br/><br/>修正错误.....<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>cinnamon::getOperation(&#34;addMoreVo&#34;).execute([afficheVo,&nbsp;roomVos]);<br/></div></div><br/><br/>最后得到:flash里的class在服务器没有对应，所以当作object看到。。。映射到java的HashMap对象了<br/>所以写程序必须小心....排除错误也要一步一步观察]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.sujun.org/default.asp?id=42" /> 
	  <id>http://www.sujun.org/default.asp?id=42</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[在Cinnamon传输自定义的对象（VO/Bean）]]></title>
	  <author>
		 <name>弃天笑</name>
		 <uri>http://www.sujun.org/</uri>
		 <email>sujun10@21cn.com</email>
	  </author>
	  <category term="" scheme="http://www.sujun.org/default.asp?cateID=21" label="Flash/Flex框架" /> 
	  <updated>2008-12-28T21:40:36+08:00</updated>
	  <published>2008-12-28T21:40:36+08:00</published>
		  <summary type="html"><![CDATA[在使用Cinnamon中传输自定义对象的话，是需要另外配置cinnamon-config.xml文件的。（注意，本文所说的配置不是基于spring的，cinnamon-config.xml的配置文件有两种配置方式，一种是基于spring，另外一种就是基本它本身的解析程序了）<br/>我当初用的时候，也是一时大意，以为它是像Adobe的Remoting一样，直接在VO的名字是上面用[RemoteClass(alias=&#34;soda.SodaVo)]一样绑定，或者采用registerClassAlias(&#34;soda.SodaVo&#34;,SodaVo);<br/>这样的注册方式，只要服务器有对应的soda.SodaVo就可以解析出来。<br/>事实上，Cinnamon传输自定义的VO，需要额外的配置，查看了他的文档，才知道class&nbsp;Mapping。下面是他的配置信息:<br/>&nbsp;&lt;bean-mapping&nbsp;alias=&#34;model::SodaVo&#34;&nbsp;java-class=&#34;soda.SodaVo&#34;&nbsp;/&gt;<br/>然后在客户端这样对应：<br/>[RemoteClass(alias=&#34;model::SodaVo)]<br/>或者<br/>registerClassAlias(&#34;model::SodaVo&#34;,SodaVo);<br/>就可以了<br/><br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.sujun.org/default.asp?id=41" /> 
	  <id>http://www.sujun.org/default.asp?id=41</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[[AS3]开源的Remoting框架：Cinnamon]]></title>
	  <author>
		 <name>弃天笑</name>
		 <uri>http://www.sujun.org/</uri>
		 <email>sujun10@21cn.com</email>
	  </author>
	  <category term="" scheme="http://www.sujun.org/default.asp?cateID=21" label="Flash/Flex框架" /> 
	  <updated>2008-12-28T19:43:53+08:00</updated>
	  <published>2008-12-28T19:43:53+08:00</published>
		  <summary type="html"><![CDATA[目前在做一个后台管理系统的项目中，因为不想使用Adobe自带的remoting组件，所以采用了Cinnamon这个开源的项目。<br/>Cinnamon是<a target="_blank" href="http://www.spicefactory.org/">http://www.spicefactory.org/</a>中的一个基于flash&nbsp;remoting技术的开源框架（具体想要了解的人可以到网站去了解<a target="_blank" href="http://www.spicefactory.org/cinnamon/">http://www.spicefactory.org/cinnamon/</a>，一进去就有它的详细介绍：Full&nbsp;support&nbsp;for&nbsp;AMF3）：下面是官方介绍，我就不翻译啦<br/>Cinnamon&nbsp;is&nbsp;a&nbsp;remoting&nbsp;framework&nbsp;based&nbsp;on&nbsp;the&nbsp;AMF3&nbsp;protocol&nbsp;connecting&nbsp;clients&nbsp;written&nbsp;in&nbsp;AS3&nbsp;with&nbsp;Java&nbsp;EE&nbsp;server&nbsp;applications.&nbsp;It&nbsp;can&nbsp;be&nbsp;deployed&nbsp;in&nbsp;every&nbsp;servlet&nbsp;container&nbsp;o&#114;&nbsp;Java&nbsp;EE&nbsp;application&nbsp;server.&nbsp;It&nbsp;contains&nbsp;the&nbsp;following&nbsp;features:<br/>&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;Full&nbsp;support&nbsp;for&nbsp;AMF3.<br/>&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Comes&nbsp;with&nbsp;its&nbsp;own&nbsp;Client&nbsp;API&nbsp;and&nbsp;does&nbsp;not&nbsp;build&nbsp;on&nbsp;top&nbsp;of&nbsp;the&nbsp;RemoteObject&nbsp;API&nbsp;of&nbsp;Flex,&nbsp;so&nbsp;it&nbsp;can&nbsp;be&nbsp;used&nbsp;with&nbsp;o&#114;&nbsp;without&nbsp;Flex.<br/>&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Client&nbsp;Proxies&nbsp;of&nbsp;remote&nbsp;services&nbsp;implement&nbsp;business&nbsp;interfaces&nbsp;so&nbsp;you&nbsp;don&#39;t&nbsp;lose&nbsp;type&nbsp;safetey&nbsp;for&nbsp;remote&nbsp;method&nbsp;invocations&nbsp;like&nbsp;with&nbsp;RemoteObject.<br/>&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Flexible&nbsp;server&nbsp;configuration:&nbsp;XML,&nbsp;annotations,&nbsp;custom&nbsp;Spring&nbsp;configuration&nbsp;namespace,&nbsp;programmatic&nbsp;configuration.<br/>&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Many&nbsp;options&nbsp;how&nbsp;to&nbsp;map&nbsp;ActionScript&nbsp;classes&nbsp;to&nbsp;Java&nbsp;classes.<br/>&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Extensible&nbsp;automatic&nbsp;type&nbsp;conversion&nbsp;for&nbsp;method&nbsp;parameters&nbsp;and&nbsp;bean&nbsp;properties.<br/>&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Currently&nbsp;supports&nbsp;Spring&nbsp;Beans&nbsp;and&nbsp;plain&nbsp;Java&nbsp;classes&nbsp;as&nbsp;services.<br/>&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Automatic&nbsp;source&nbsp;generation&nbsp;of&nbsp;AS3&nbsp;service&nbsp;interfaces&nbsp;and&nbsp;proxies&nbsp;with&nbsp;Cinnamons&nbsp;Ant&nbsp;task.<br/>&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Integration&nbsp;with&nbsp;JPA/Hibernate&nbsp;when&nbsp;used&nbsp;with&nbsp;Pimento&nbsp;Data&nbsp;Services.<br/><br/><br/>根据个人的使用感觉来说，还是非常不错的，使用也很方便。它在服务端声明了远程服务接口以及实现类，然后通过他自带的工具包配合Ant工具，就可以生成对应的客户端接口和实现类。然后在使用过程中，只需要使用这个接口就可以了，非常方便。这种把整个服务端的接口搬下来的思想还是非常不错的。<br/>希望有兴趣的人可以去了解一下，里面有详细API以及说明文档。建议要使用的人应该去了解，他本身带有简单的使用教程。<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>//进行连接网络,并进行数据返回<br/>loginService.userLogin(username,password).addResultHandler(loginResult);<br/></div></div><br/>其中userLogin为远程的一个服务端方法，loginResult为接受远程方法返回的结果]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.sujun.org/default.asp?id=40" /> 
	  <id>http://www.sujun.org/default.asp?id=40</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[[as3]Flash自动进入方便面三国游戏]]></title>
	  <author>
		 <name>弃天笑</name>
		 <uri>http://www.sujun.org/</uri>
		 <email>sujun10@21cn.com</email>
	  </author>
	  <category term="" scheme="http://www.sujun.org/default.asp?cateID=5" label="ActionScript" /> 
	  <updated>2008-11-12T11:44:03+08:00</updated>
	  <published>2008-11-12T11:44:03+08:00</published>
		  <summary type="html"><![CDATA[之前有一段时间在玩webgame，本来打算看能不能看发出简单的外挂，让自己玩游戏玩得更简单些，可惜没时间，最终只是用flash开发了一个账号登陆器，就是预先存多个账号，然后选择对应的账号，就会登陆到游戏里面,绕过每次输入帐户密码的过程。<br/>下面发送的是根据账号自动登陆的flash，把生成出来的gameurl复制到浏览器上，就可以马上进去游戏了<br/>演示flash:<br/><img src="http://www.sujun.org/attachments/month_0811/42008111212914.jpg" border="0" alt=""/><br/><br/>接下是简单的原理说明:其实就是利用Flash去请求网页，然后解析网页返回的数据，提取出自己所需要的数据，然后再进一步请求页面，如此反复而已：<br/><img src="http://www.sujun.org/attachments/month_0811/020081112113826.jpg" border="0" alt=""/><br/><br/>再接下来就是代码的简单说明了<br/>这是初始函数<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>/**<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;*&nbsp;程序入口<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;*&nbsp;@author&nbsp;弃天笑<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;*&nbsp;@date&nbsp;2008.06.10<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;*/&nbsp;&nbsp;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;function&nbsp;init():void<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.useCodePage&nbsp;=&nbsp;true;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//获取登陆首页数据<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;loader&nbsp;=&nbsp;new&nbsp;URLLoader();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;request&nbsp;=&nbsp;new&nbsp;URLRequest();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;requestEsate&nbsp;=&nbsp;&#34;fmbMain&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;request.url&nbsp;=&nbsp;&#34;<a href="http://baidu.51wan.com/login_51wan.php?game=fbmsg" target="_blank">http://baidu.51wan.com/login_51wan.php?game=fbmsg</a>&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;request.method&nbsp;=&nbsp;URLRequestMethod.POST;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;loader.addEventListener(Event.COMPLETE,onLoader);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;loader.load(request);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;serverList.dataProvider&nbsp;=&nbsp;boxData;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;loginBtn.enabled&nbsp;=&nbsp;false;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;copyBtn.enabled&nbsp;=&nbsp;false;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;nameText.text&nbsp;=&nbsp;&#34;sujun.org&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;passText.text&nbsp;=&nbsp;&#34;123456&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/></div></div><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>//进行登陆请求,分析出必须的参数<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;idNameFind:String&nbsp;=&nbsp;&#34;test.setAttribute(&#39;name&#39;,&#39;&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;idName:String&nbsp;=&nbsp;getStringValue(contents,idNameFind,&#34;&#39;)&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;timestampValue:String&nbsp;=&nbsp;getStringValue(contents,&#34;&#39;timestamp&#39;).value=&#39;&#34;,&#34;&#39;;&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;signValue:String&nbsp;=&nbsp;getStringValue(contents,&#34;(&#39;sign&#39;).value=&#39;&#34;,&#34;&#39;;&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//加入参数,分析页面代码<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;variables:URLVariables&#160;&#160;&#160;&#160;=&nbsp;new&nbsp;URLVariables();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;variables[idName]&nbsp;=&nbsp;idName;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;variables[&#34;timestamp&#34;]&nbsp;=&nbsp;timestampValue;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;variables[&#34;sign&#34;]&nbsp;=&nbsp;signValue;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;variables[&#34;dontup&#100;ateagain&#34;]&nbsp;=&nbsp;&#34;dont&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;variables[&#34;gamename&#34;]&nbsp;=&nbsp;&#34;fbmsg&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;variables[&#34;username&#34;]&nbsp;=&nbsp;nameText.text;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;variables[&#34;password&#34;]&nbsp;=&nbsp;passText.text;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//进行登陆连接<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;requestEsate&nbsp;=&nbsp;&#34;login&#34;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;request.url&nbsp;=&nbsp;LOGIN_URL;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;request.data&nbsp;=&nbsp;variables;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;loader.load(request);<br/></div></div><br/>这一段是解析登陆页面的一些数据，例如解析出页面包含的验证码什么的<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>//根据从字符串中取出所需的数据<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;function&nbsp;getStringValue(contents:String,findStr:String,endSign:String):String<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;idNameFind:String&nbsp;=&nbsp;findStr;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;idNameStart:int&nbsp;=&nbsp;contents.indexOf(idNameFind);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;idNameEnd:int&nbsp;=&nbsp;contents.indexOf(endSign,idNameStart);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;idName:String&nbsp;=&nbsp;contents.substring(idNameStart&nbsp;+&nbsp;idNameFind.length,idNameEnd);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&nbsp;idName;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/></div></div><br/><br/>全部代码就不贴出来了，大家可以把代码下载下去，用flex编译一下就可以运行看到效果了<br/>代码下载:<br/><img src="http://www.sujun.org/images/download.gif" alt="下载文件" style="margin:0px 2px -4px 0px"/> <a href="http://www.sujun.org/attachments/month_0811/c20081112114241.rar" target="_blank">点击下载此代码</a>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.sujun.org/default.asp?id=39" /> 
	  <id>http://www.sujun.org/default.asp?id=39</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[[反射]比较两个VO对象的值]]></title>
	  <author>
		 <name>弃天笑</name>
		 <uri>http://www.sujun.org/</uri>
		 <email>sujun10@21cn.com</email>
	  </author>
	  <category term="" scheme="http://www.sujun.org/default.asp?cateID=10" label="Java" /> 
	  <updated>2008-10-15T22:39:06+08:00</updated>
	  <published>2008-10-15T22:39:06+08:00</published>
		  <summary type="html"><![CDATA[开发flash&nbsp;remoting的时候，直接把一个flash的vo对象发送到服务器，然后服务器接受这个vo，并取出对应的值，具体的情况可能各不相同，直接假设一个客户端传过来的vo要把里面有值的地方传给新的vo对象中<br/>(实际例子，客户端传一个与Hibernate的VO具有相同属性的vo，在这里要把客户端vo的值传给hibernate的vo，从而更新数据库，为了避免给不同的vo手工编写代码，所以就用到了反射)<br/>在这里，主要是利用到反射，这是一个简单的例子，有兴趣的人可以继续扩充<br/>下面是比较类的代码<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>package&nbsp;o&#114;g.sujun.utils;<br/><br/>import&nbsp;java.lang.reflect.Method;<br/><br/>public&nbsp;class&nbsp;ObjectCompare&nbsp;<br/>{<br/>&#160;&#160;&#160;&#160;/**<br/>&#160;&#160;&#160;&#160;&nbsp;*&nbsp;比较客户端和服务端的vo，把clientVo有值的方法传给serverVo对应的方法<br/>&#160;&#160;&#160;&#160;&nbsp;*&nbsp;@param&nbsp;clientVo<br/>&#160;&#160;&#160;&#160;&nbsp;*&nbsp;@param&nbsp;serverVo<br/>&#160;&#160;&#160;&#160;&nbsp;*/<br/>&#160;&#160;&#160;&#160;public&nbsp;static&nbsp;void&nbsp;voCompare(Object&nbsp;clientVo,&nbsp;Object&nbsp;serverVo)&nbsp;throws&nbsp;Exception<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//通过反射得出客户端vo的所有get的属性方法<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Class&nbsp;clientClass&nbsp;=&nbsp;clientVo.getClass();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Method[]&nbsp;methods&nbsp;=&nbsp;clientClass.getMethods();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;for(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;methods.length;&nbsp;i++)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//System.out.println(methods[i].getName());<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;String&nbsp;methodName&nbsp;=&nbsp;methods[i].getName();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//查找出set相关的方法<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;int&nbsp;isGet&nbsp;=&nbsp;methodName.indexOf(&#34;get&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(isGet&nbsp;!=&nbsp;-1&nbsp;&amp;&amp;&nbsp;!methodName.equals(&#34;getClass&#34;))<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Object&nbsp;result&nbsp;=&nbsp;null;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//反射出该方法，并得到它的返回结果<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;try<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;result&nbsp;=&nbsp;methods[i].invoke(clientVo,null);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;catch(Exception&nbsp;e)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;e.printStackTrace();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//System.out.println(&#34;===result===:&#34;&nbsp;+&nbsp;result);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(result&nbsp;!=&nbsp;null)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//有值，则传给serverVo对应的set方法<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;methodName&nbsp;=&nbsp;methodName.substring(3,methodName.length());<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//System.out.println(&#34;==result.getClass()===&#34;&nbsp;+&nbsp;result.getClass());<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;try<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Method&nbsp;method&nbsp;=&nbsp;null;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(result.getClass()&nbsp;==&nbsp;Integer.class)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;method&nbsp;=&nbsp;serverVo.getClass().getMethod(&#34;set&#34;&nbsp;+&nbsp;methodName,int.class);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else&nbsp;if(result.getClass()&nbsp;==&nbsp;Double.class)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;method&nbsp;=&nbsp;serverVo.getClass().getMethod(&#34;set&#34;&nbsp;+&nbsp;methodName,double.class);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else&nbsp;if(result.getClass()&nbsp;==&nbsp;Boolean.class)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;method&nbsp;=&nbsp;serverVo.getClass().getMethod(&#34;set&#34;&nbsp;+&nbsp;methodName,boolean.class);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;method&nbsp;=&nbsp;serverVo.getClass().getMethod(&#34;set&#34;&nbsp;+&nbsp;methodName,&nbsp;result.getClass());<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//System.out.println(&#34;==method===&#34;&nbsp;+&nbsp;method);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;method.invoke(serverVo,result);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//System.out.println(&#34;=newResult====&#34;&nbsp;+&nbsp;newResult);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;catch(Exception&nbsp;e)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;e.printStackTrace();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;}<br/>//&#160;&#160;&#160;&#160;private&nbsp;static&nbsp;Object&nbsp;reflectMethod(Object&nbsp;vo,&nbsp;Method&nbsp;method,String&nbsp;methodName,&nbsp;Object&nbsp;args)<br/>//&#160;&#160;&#160;&#160;{<br/>//&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.out.println(&#34;=vo====&#34;&nbsp;+&nbsp;vo);<br/>//&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.out.println(&#34;=method====&#34;&nbsp;+&nbsp;method);<br/>//&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.out.println(&#34;=args====&#34;&nbsp;+&nbsp;args);<br/>//&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//Object[]&nbsp;objs&nbsp;=&nbsp;new&nbsp;Object[1];<br/>//&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//objs[0]&nbsp;=&nbsp;&#34;soda1111&#34;;<br/>//&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;try<br/>//&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>//&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Object&nbsp;result&nbsp;=&nbsp;method.invoke(vo,null);<br/>//&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&nbsp;result;<br/>//&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>//&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;catch(Exception&nbsp;e)<br/>//&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>//&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;e.printStackTrace();<br/>//&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>//&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&nbsp;null;<br/>//&#160;&#160;&#160;&#160;}<br/>}<br/><br/></div></div><br/>接着看一下需要比较的vo<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/><br/>public&nbsp;class&nbsp;ClientVo&nbsp;<br/>{<br/>&#160;&#160;&#160;&#160;private&nbsp;String&nbsp;name;<br/>&#160;&#160;&#160;&#160;private&nbsp;int&nbsp;age;<br/>&#160;&#160;&#160;&#160;private&nbsp;String&nbsp;form;<br/>&#160;&#160;&#160;&#160;private&nbsp;boolean&nbsp;flag;<br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;public&nbsp;String&nbsp;getName()&nbsp;<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&nbsp;name;<br/>&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;public&nbsp;void&nbsp;setName(String&nbsp;name)&nbsp;<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this.name&nbsp;=&nbsp;name;<br/>&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;public&nbsp;int&nbsp;getAge()&nbsp;<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&nbsp;age;<br/>&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;public&nbsp;void&nbsp;setAge(int&nbsp;age)<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this.age&nbsp;=&nbsp;age;<br/>&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;public&nbsp;String&nbsp;getForm()&nbsp;<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&nbsp;form;<br/>&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;public&nbsp;void&nbsp;setForm(String&nbsp;form)&nbsp;<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this.form&nbsp;=&nbsp;form;<br/>&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;public&nbsp;String&nbsp;toString()<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&nbsp;&#34;[ClientVo&nbsp;name:&#34;&nbsp;+&nbsp;name&nbsp;+&nbsp;&#34;&nbsp;age:&#34;&nbsp;+&nbsp;age&nbsp;+&nbsp;&#34;&nbsp;form:&#34;&nbsp;+&nbsp;form&nbsp;+&nbsp;&#34;]&#34;;<br/>&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;public&nbsp;boolean&nbsp;getFlag()&nbsp;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&nbsp;flag;<br/>&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;public&nbsp;void&nbsp;setFlag(boolean&nbsp;flag)&nbsp;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this.flag&nbsp;=&nbsp;flag;<br/>&#160;&#160;&#160;&#160;}<br/>}<br/></div></div><br/>最后是测试代码<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>import&nbsp;o&#114;g.sujun.utils.ObjectCompare;<br/>public&nbsp;class&nbsp;TestMain<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;throws&nbsp;Exception<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClientVo&nbsp;clientVo&nbsp;=&nbsp;new&nbsp;ClientVo();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clientVo.setName(&#34;soda&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clientVo.setAge(24);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clientVo.setFlag(true);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//clientVo.setForm(&#34;guang&nbsp;dong&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClientVo&nbsp;serverVo&nbsp;=&nbsp;new&nbsp;ClientVo();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;serverVo.setForm(&#34;by&nbsp;soda.C&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ObjectCompare.voCompare(clientVo,&nbsp;serverVo);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(serverVo);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/></div></div><br/>编译输出结果是:<br/>[ClientVo&nbsp;name:soda&nbsp;age:24&nbsp;form:by&nbsp;soda.C]<br/><br/>//clientVo.setForm(&#34;guang&nbsp;dong&#34;);恢复这个注释的代码，输出的结果是：<br/>[ClientVo&nbsp;name:soda&nbsp;age:24&nbsp;form:guang&nbsp;dong]<br/><br/>可以当有属性没有值的时候，他是不会重新赋值的]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.sujun.org/default.asp?id=38" /> 
	  <id>http://www.sujun.org/default.asp?id=38</id> 
  </entry>	
		
</feed>