﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-apple0668</title><link>http://www.blogjava.net/apple0668/</link><description>上善若水，水善利万物而不争，处众人之所恶而不争，故几于道——《老子》</description><language>zh-cn</language><lastBuildDate>Fri, 19 Mar 2010 14:49:28 GMT</lastBuildDate><pubDate>Fri, 19 Mar 2010 14:49:28 GMT</pubDate><ttl>60</ttl><item><title>Drools语法详解&lt;转&gt;</title><link>http://www.blogjava.net/apple0668/archive/2010/01/17/309884.html</link><dc:creator>apple0668</dc:creator><author>apple0668</author><pubDate>Sun, 17 Jan 2010 13:11:00 GMT</pubDate><guid>http://www.blogjava.net/apple0668/archive/2010/01/17/309884.html</guid><wfw:comment>http://www.blogjava.net/apple0668/comments/309884.html</wfw:comment><comments>http://www.blogjava.net/apple0668/archive/2010/01/17/309884.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/apple0668/comments/commentRss/309884.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/apple0668/services/trackbacks/309884.html</trackback:ping><description><![CDATA[<p>原文：<font style="background-color: #cce8cf">http://www.javaeye.com/topic/190294</font><font style="background-color: #cce8cf"><br />
一个典型的DRL文件： <br />
Java代码 <br />
①package com.sample&nbsp;&nbsp; //包名，不可以与关键字冲突&nbsp;&nbsp; <br />
②import com.sample.DroolsTest.Message;//本文件需要导入的类&nbsp;&nbsp; <br />
③global java.util.List myGlobalList;//全局变量&nbsp;&nbsp; <br />
④//定义函数体&nbsp;&nbsp; <br />
function String hello(String name) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; return "Hello "+name+"!";&nbsp;&nbsp; <br />
}&nbsp;&nbsp; <br />
&nbsp; <br />
⑤rule "myRule"&nbsp;&nbsp;&nbsp;&nbsp; <br />
no-loop true&nbsp; //执行一次后，是否能被再次激活&nbsp;&nbsp; <br />
salience 100&nbsp; //优先级别&nbsp;&nbsp; <br />
⑥when&nbsp;&nbsp;&nbsp;&nbsp; <br />
m : Message( status == Message.HELLO, message : message )&nbsp;&nbsp;&nbsp; <br />
⑦then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
m.setMessage( "Goodbye cruel world" );&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m.setStatus( Message.GOODBYE );&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; update( m );&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; myGlobalList.add( "Hello World" );//使用global 变量&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; System.out.println( hello( "Bob" ) );//调用定义函数&nbsp;&nbsp; <br />
End&nbsp; </font></p>
<p><font style="background-color: #cce8cf">①package com.sample&nbsp;&nbsp; //包名，不可以与关键字冲突<br />
②import com.sample.DroolsTest.Message;//本文件需要导入的类<br />
③global java.util.List myGlobalList;//全局变量<br />
④//定义函数体<br />
function String hello(String name) {<br />
&nbsp;&nbsp;&nbsp; return "Hello "+name+"!";<br />
}</font></p>
<p><font style="background-color: #cce8cf">⑤rule "myRule"&nbsp; <br />
no-loop true&nbsp; //执行一次后，是否能被再次激活<br />
salience 100&nbsp; //优先级别<br />
⑥when&nbsp; <br />
m : Message( status == Message.HELLO, message : message ) <br />
⑦then&nbsp;&nbsp;&nbsp; <br />
m.setMessage( "Goodbye cruel world" );<br />
&nbsp;&nbsp;m.setStatus( Message.GOODBYE );<br />
&nbsp;&nbsp;update( m );<br />
&nbsp;&nbsp;&nbsp; myGlobalList.add( "Hello World" );//使用global 变量<br />
&nbsp;&nbsp;&nbsp; System.out.println( hello( "Bob" ) );//调用定义函数<br />
End</font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">①package com.sample <br />
包名，不可以与关键字冲突。一个包通过名称空间描绘，这样很好的保持了一组规则的独立性。 <br />
②import <br />
标记就像java中的含义一样。对于任何要用在规则中的对象，你需要指定完整的路径和类型名。Drools从同名的java包中自动导入类。 <br />
③global <br />
如果多个包定义了同样名称的全局变量，它们必须使用同样的类型，并且全部指向同一个全局值。全部变量通常用来返回数据，获得提供数据或服务给规则使用。为了使用全局变量，你必须： <br />
在规则文件中声明全局变量并使用它，如： <br />
global java.util.List myGlobalList; <br />
rule "Using a global" <br />
when <br />
&nbsp;&nbsp;&nbsp; eval( true ) <br />
then <br />
&nbsp;&nbsp;&nbsp; myGlobalList.add( "Hello World" ); <br />
end <br />
在working memory上设置全局变量的值。最好是在将fact插入working memory之前设置完所有全局变量，如： <br />
List list = new ArrayList(); <br />
WorkingMemory wm = rulebase.newStatefulSession(); <br />
wm.setGlobal( "myGlobalList", list ); <br />
④function <br />
相对于正常的java类，函数是在你的规则代码中放置语言代码的方法。它们不可能做任何超过你可以在帮助类（在java中定义，被设置入规则的Working Memory中的类）中做到的事情。使用函数的优点是可以将逻辑保存在一个地方，并且你可以在需要的时候改变函数（这样做各有优缺点）。函数最大的用处是被规则的推论（then）部分中的行为所调用，特别是当一个行为操作需要反复被调用时（将公用代码抽取出来成为一个函数）。 <br />
⑤rule 名称可以在&#8220;&#8221;下取任何名字。 <br />
属性列表： <br />
属性 类型 默认值 功能描述 <br />
no-loop Boolean false 设置no-loop为true可以阻止该规则被再次激活。 <br />
salience integer 0 优先级数字高的规则会比优先级低的规则先执行。 <br />
agenda-group String MAIN 只有在具有焦点的agenda group中的规则才能够激发。 <br />
auto-focus Boolean false 如果该规则符合激活条件，则该规则所在agenda-group自动获得焦点，允许规则激发。 <br />
activation-group String N/A 在同名activation-group中的规则将以互斥的方式激发 <br />
dialect String "java" or "mvel" 指定在LHS代码表达式或RHS代码块中使用的语言。 <br />
date-effective String, 包含日期/时间定义 N/A 规则只能在date-effective指定的日期和时间之后激活。 <br />
date-exptires String, 包含日期/时间定义 N/A 如果当前时间在date-expires指定的时间之后，规则不能激活。 </font></p>
<p><font style="background-color: #cce8cf">duration long N/A 指出规则将在指定的一段时间后激发，如果那个时候规则的激活条件还是处于true的情况下。 <br />
⑥&nbsp; LHS (when) 条件元素 <br />
为了能够引用匹配的对象，使用一个模式绑定变量如&#8216;$c&#8217;。变量的前缀使用的$是可选的，但是在复杂的规则中它会很方便用来区别变量与字段的不同。 <br />
$c : Cheese( type == "stilton", price &lt; 10, age == "mature" ) <br />
&amp;&amp; 和|| 约束连接符 <br />
Cheese( type == "stilton" &amp;&amp; price &lt; 10, age == "mature" ) <br />
Cheese( type == "stilton" || price &lt; 10, age == "mature" ) <br />
第一个有两个约束而第二个组有一个约束，可以通过圆括号来改变求值的顺序。 <br />
单值约束 <br />
Matches 操作 <br />
Cheese( type matches "(Buffalo)?\S*Mozerella" ) <br />
Cheese( type not matches "(Buffulo)?\S*Mozerella" ) <br />
Contains 操作 <br />
CheeseCounter( cheeses contains "stilton" ) <br />
CheeseCounter( cheeses not contains "cheddar" ) <br />
memberof操作 <br />
CheeseCounter( cheese memberof $matureCheeses ) <br />
CheeseCounter( cheese not memberof $matureCheeses ) <br />
字符串约束 <br />
字符串约束是最简单的约束格式，将字段与指定的字符串求值：数值，日期，string或者boolean。 <br />
Cheese( quantity == 5 ) <br />
Cheese( bestBefore &lt; "27-Oct-2007" ) <br />
Cheese( type == "stilton" ) <br />
Cheese( smelly == true ) <br />
绑定变量约束 <br />
变量可以绑定到Fact和它们的字段，然后在后面的字段约束中使用。绑定变量被称为声明。有效的操作符由被约束的字段类型决定；在那里会进行强制转换。绑定变量约束使用'=='操作符，因为能够使用hash索引，因此提供非常快的执行速度。 <br />
Person( likes : favouriteCheese ) <br />
Cheese( type == likes ) <br />
返回值约束 <br />
返回值约束可以使用任何有效的Java元数据类型或对象。要避免使用任何Drools关键字作为声明标识。在返回值约束中使用的函数必须返回静态常量（time constant）结果。之前声明的绑定可以用在表达式中。 <br />
Person( girlAge : age, sex == "F" ) <br />
Person( age == ( girlAge + 2) ), sex == 'M' ) <br />
复合值约束 <br />
复合值约束用在可能有多个允许值的时候，当前只支持'in' 和'not in'两个操作。这些操作使用圆括号包含用逗号分开的值的列表，它可以是变量，字符串，返回值或限定标识符。'in' 和'not in'运算式实际上被语法分析器重写成多个!= and ==组成的多重约束。 <br />
Person( $cheese : favouriteCheese ) <br />
Cheese( type in ( "stilton", "cheddar", $cheese ) <br />
多重约束 <br />
多重约束允许你对一个字段通过使用'&amp;&amp;' 或者'||'约束连接符进行多个约束条件的判断。允许使用圆括号分组，它会让这种约束看起来更自然。 <br />
Person( age ( (&gt; 30 &amp;&amp; &lt; 40) || (&gt; 20 &amp;&amp; &lt; 25) ) ) <br />
Person( age &gt; 30 &amp;&amp; &lt; 40 || location == "london" ) <br />
内联的Eval约束 <br />
eval约束可以使用任何有效的语言表达式，只要它最终能被求值为boolean元数据类型。表达式必须是静态常量（time constant）。任何在当前模式之前定义的变量都可以使用，自动代入（autovivification）机制用来自动建立字段绑定变量。当构建器发现标识不是当前定义的变量名是，它将尝试将它作为对象的字段来访问，这种情况下，构建器自动在inline-eval中建立该字段的同名变量。 <br />
Person( girlAge : age, sex = "F" ) <br />
Person( eval( girlAge == boyAge + 2 ), sex = 'M' ) </font></p>
<p><font style="background-color: #cce8cf">⑦RHS (then) 执行操作 <br />
这部分应当包含一系列需要执行的操作。规则的RHS部分应该保持简短的，这保持它是声明性和可读性的。如果你发现你需要在RHS中使用命令式或and/or条件代码，那你可能需要将规则拆分为多个规则。RHS的主要目的是插入，删除修改working memory数据。 <br />
"update(object, handle);" 将告诉引擎对象已经改变（已经被绑定到LHS中的那一个），并且规则需要重新检查。 <br />
"insert(new Something());" 将在working memory中放置一个你新建的对象。 <br />
"insertLogical(new Something());" 与insert类似，但是当没有更多的fact支持当前激发规则的真值状态时，对象自动删除。 <br />
"retract(handle);" removes an object from working memory. <br />
⑧ Query <br />
查询中仅仅包含规则LHS部分的结构（不用指定when或then）。它提供了查询working memory 中符合约束条件的对象的一个简单办法。 <br />
query "people over the age of 30" <br />
&nbsp;&nbsp;&nbsp; person : Person( age &gt; 30 ) <br />
end <br />
通过在返回的查询结果(QueryResults)上进行标准的for循环遍历，每一行将返回一个QueryResult，该对象可以用来存取组元中的每一个Column。这些Column可以通过声明的名称或索引位置存取。 <br />
QueryResults results = workingMemory.getQueryResults( "people over the age of 30" ); <br />
for ( Iterator it = results.iterator; it.hasNext(); ) { <br />
&nbsp;&nbsp;&nbsp; QueryResult result = ( QueryResult ) it.next(); <br />
&nbsp;&nbsp;&nbsp; Person person = ( Person ) result.get( "person" ); <br />
&nbsp;&nbsp;&nbsp; } </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p><img src ="http://www.blogjava.net/apple0668/aggbug/309884.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/apple0668/" target="_blank">apple0668</a> 2010-01-17 21:11 <a href="http://www.blogjava.net/apple0668/archive/2010/01/17/309884.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eclipse3.4安装drools插件手记</title><link>http://www.blogjava.net/apple0668/archive/2010/01/17/309883.html</link><dc:creator>apple0668</dc:creator><author>apple0668</author><pubDate>Sun, 17 Jan 2010 13:08:00 GMT</pubDate><guid>http://www.blogjava.net/apple0668/archive/2010/01/17/309883.html</guid><wfw:comment>http://www.blogjava.net/apple0668/comments/309883.html</wfw:comment><comments>http://www.blogjava.net/apple0668/archive/2010/01/17/309883.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/apple0668/comments/commentRss/309883.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/apple0668/services/trackbacks/309883.html</trackback:ping><description><![CDATA[最近由于项目用到drools，所以只有一边学习一边开发，首先先安装好插件搭好开发环境。<br />
下载drools eclipse插件，地址为：<a href="http://www.jboss.org/drools/downloads.html">http://www.jboss.org/drools/downloads.html</a><br />
解压用links方式安装插件，如果<font style="background-color: #cce8cf">features</font>目录和<font style="background-color: #cce8cf">plugins</font>目录上层没有eclipse文件夹，就要建一个。<br />
<br />
在Eclipse目录下面新建一个links文件夹，里面建一个XXX.link，内容为：path=F://plugins/drools<br />
<br />
启动Eclipse，在window----prefernces那里如果看不到又drools，就说明插件安装不成功。<br />
<br />
Eclipse3.4安装drools插件遇到识别不了插件，解决方案如下：<br />
<br />
<font style="background-color: #cce8cf">F:\eclipse\configuration\org.eclipse.equinox.simpleconfigurator</font>下面<font style="background-color: #cce8cf">bundles.info</font>最后加上以下几句：<br />
<br />
<p>org.guvnor.tools,5.0.1,file:plugins\org.guvnor.tools_5.0.1.jar,4,false <br />
org.eclipse.webdav,3.0.101,file:plugins\org.eclipse.webdav_3.0.101.jar,4,false <br />
org.drools.eclipse,5.0.1,file:plugins\org.drools.eclipse_5.0.1.jar,4,false <br />
org.drools.eclipse.task,5.0.1,file:plugins\org.drools.eclipse.task_5.0.1.jar,4,false </p>
保存即可。<br />
<br />
再次启动Eclipse就可以成功安装插件，window----prefernces---drools插件，配置drools的依赖包环境，这些很简单，省略。<br />
<br />
新建一个drools工程，就会看到一个附带的helloworld的例子，执行java文件即可执行测试。<br />
<br />
<font style="background-color: #cce8cf">Sample.drl</font><br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">package&nbsp;com.sample<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />import&nbsp;com.sample.DroolsTest.Message;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />rule&nbsp;"Hello&nbsp;World"<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;when<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m&nbsp;:&nbsp;Message(&nbsp;status&nbsp;==&nbsp;Message.HELLO,&nbsp;myMessage&nbsp;:&nbsp;message&nbsp;)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;then<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&nbsp;myMessage&nbsp;);&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m.setMessage(&nbsp;"Goodbye&nbsp;cruel&nbsp;world"&nbsp;);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m.setStatus(&nbsp;Message.GOODBYE&nbsp;);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;update(&nbsp;m&nbsp;);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />end<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />rule&nbsp;"GoodBye"<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;when<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Message(&nbsp;status&nbsp;==&nbsp;Message.GOODBYE,&nbsp;myMessage&nbsp;:&nbsp;message&nbsp;)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;then<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&nbsp;myMessage&nbsp;);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />end</span></div>
<br />
<br />
<font style="background-color: #cce8cf">DroolsTest.java<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.sample;<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.drools.KnowledgeBase;<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.drools.KnowledgeBaseFactory;<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.drools.builder.KnowledgeBuilder;<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.drools.builder.KnowledgeBuilderError;<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.drools.builder.KnowledgeBuilderErrors;<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.drools.builder.KnowledgeBuilderFactory;<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.drools.builder.ResourceType;<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.drools.io.ResourceFactory;<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.drools.logger.KnowledgeRuntimeLogger;<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.drools.logger.KnowledgeRuntimeLoggerFactory;<br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.drools.runtime.StatefulKnowledgeSession;<br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img id="Codehighlighter1_524_574_Open_Image" onclick="this.style.display='none'; Codehighlighter1_524_574_Open_Text.style.display='none'; Codehighlighter1_524_574_Closed_Image.style.display='inline'; Codehighlighter1_524_574_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_524_574_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_524_574_Closed_Text.style.display='none'; Codehighlighter1_524_574_Open_Image.style.display='inline'; Codehighlighter1_524_574_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_524_574_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**&nbsp;*/</span><span id="Codehighlighter1_524_574_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
</span><span style="color: #008080">16</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;This&nbsp;is&nbsp;a&nbsp;sample&nbsp;class&nbsp;to&nbsp;launch&nbsp;a&nbsp;rule.<br />
</span><span style="color: #008080">17</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img id="Codehighlighter1_600_2212_Open_Image" onclick="this.style.display='none'; Codehighlighter1_600_2212_Open_Text.style.display='none'; Codehighlighter1_600_2212_Closed_Image.style.display='inline'; Codehighlighter1_600_2212_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_600_2212_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_600_2212_Closed_Text.style.display='none'; Codehighlighter1_600_2212_Open_Image.style.display='inline'; Codehighlighter1_600_2212_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;DroolsTest&nbsp;</span><span id="Codehighlighter1_600_2212_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_600_2212_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">20</span><span style="color: #000000"><img id="Codehighlighter1_649_1165_Open_Image" onclick="this.style.display='none'; Codehighlighter1_649_1165_Open_Text.style.display='none'; Codehighlighter1_649_1165_Closed_Image.style.display='inline'; Codehighlighter1_649_1165_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_649_1165_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_649_1165_Closed_Text.style.display='none'; Codehighlighter1_649_1165_Open_Image.style.display='inline'; Codehighlighter1_649_1165_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span id="Codehighlighter1_649_1165_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_649_1165_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">21</span><span style="color: #000000"><img id="Codehighlighter1_657_1112_Open_Image" onclick="this.style.display='none'; Codehighlighter1_657_1112_Open_Text.style.display='none'; Codehighlighter1_657_1112_Closed_Image.style.display='inline'; Codehighlighter1_657_1112_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_657_1112_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_657_1112_Closed_Text.style.display='none'; Codehighlighter1_657_1112_Open_Image.style.display='inline'; Codehighlighter1_657_1112_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_657_1112_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_657_1112_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">22</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;load&nbsp;up&nbsp;the&nbsp;knowledge&nbsp;base</span><span style="color: #008000"><br />
</span><span style="color: #008080">23</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KnowledgeBase&nbsp;kbase&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;readKnowledgeBase();<br />
</span><span style="color: #008080">24</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StatefulKnowledgeSession&nbsp;ksession&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;kbase.newStatefulKnowledgeSession();<br />
</span><span style="color: #008080">25</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KnowledgeRuntimeLogger&nbsp;logger&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;KnowledgeRuntimeLoggerFactory.newFileLogger(ksession,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">test</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">26</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;go&nbsp;!</span><span style="color: #008000"><br />
</span><span style="color: #008080">27</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Message&nbsp;message&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Message();<br />
</span><span style="color: #008080">28</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message.setMessage(</span><span style="color: #000000">"</span><span style="color: #000000">Hello&nbsp;World</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">29</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message.setStatus(Message.HELLO);<br />
</span><span style="color: #008080">30</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ksession.insert(message);<br />
</span><span style="color: #008080">31</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ksession.fireAllRules();<br />
</span><span style="color: #008080">32</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.close();<br />
</span><span style="color: #008080">33</span><span style="color: #000000"><img id="Codehighlighter1_1134_1162_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1134_1162_Open_Text.style.display='none'; Codehighlighter1_1134_1162_Closed_Image.style.display='inline'; Codehighlighter1_1134_1162_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1134_1162_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1134_1162_Closed_Text.style.display='none'; Codehighlighter1_1134_1162_Open_Image.style.display='inline'; Codehighlighter1_1134_1162_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(Throwable&nbsp;t)&nbsp;</span><span id="Codehighlighter1_1134_1162_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1134_1162_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">34</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.printStackTrace();<br />
</span><span style="color: #008080">35</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">36</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">37</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">38</span><span style="color: #000000"><img id="Codehighlighter1_1235_1784_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1235_1784_Open_Text.style.display='none'; Codehighlighter1_1235_1784_Closed_Image.style.display='inline'; Codehighlighter1_1235_1784_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1235_1784_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1235_1784_Closed_Text.style.display='none'; Codehighlighter1_1235_1784_Open_Image.style.display='inline'; Codehighlighter1_1235_1784_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;KnowledgeBase&nbsp;readKnowledgeBase()&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Exception&nbsp;</span><span id="Codehighlighter1_1235_1784_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1235_1784_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">39</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KnowledgeBuilder&nbsp;kbuilder&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;KnowledgeBuilderFactory.newKnowledgeBuilder();<br />
</span><span style="color: #008080">40</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;kbuilder.add(ResourceFactory.newClassPathResource(</span><span style="color: #000000">"</span><span style="color: #000000">Sample.drl</span><span style="color: #000000">"</span><span style="color: #000000">),&nbsp;ResourceType.DRL);<br />
</span><span style="color: #008080">41</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KnowledgeBuilderErrors&nbsp;errors&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;kbuilder.getErrors();<br />
</span><span style="color: #008080">42</span><span style="color: #000000"><img id="Codehighlighter1_1481_1637_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1481_1637_Open_Text.style.display='none'; Codehighlighter1_1481_1637_Closed_Image.style.display='inline'; Codehighlighter1_1481_1637_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1481_1637_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1481_1637_Closed_Text.style.display='none'; Codehighlighter1_1481_1637_Open_Image.style.display='inline'; Codehighlighter1_1481_1637_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(errors.size()&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_1481_1637_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1481_1637_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">43</span><span style="color: #000000"><img id="Codehighlighter1_1528_1564_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1528_1564_Open_Text.style.display='none'; Codehighlighter1_1528_1564_Closed_Image.style.display='inline'; Codehighlighter1_1528_1564_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1528_1564_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1528_1564_Closed_Text.style.display='none'; Codehighlighter1_1528_1564_Open_Image.style.display='inline'; Codehighlighter1_1528_1564_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(KnowledgeBuilderError&nbsp;error:&nbsp;errors)&nbsp;</span><span id="Codehighlighter1_1528_1564_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1528_1564_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">44</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.err.println(error);<br />
</span><span style="color: #008080">45</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">46</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throw</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;IllegalArgumentException(</span><span style="color: #000000">"</span><span style="color: #000000">Could&nbsp;not&nbsp;parse&nbsp;knowledge.</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">47</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">48</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KnowledgeBase&nbsp;kbase&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;KnowledgeBaseFactory.newKnowledgeBase();<br />
</span><span style="color: #008080">49</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());<br />
</span><span style="color: #008080">50</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;kbase;<br />
</span><span style="color: #008080">51</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">52</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">53</span><span style="color: #000000"><img id="Codehighlighter1_1816_2209_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1816_2209_Open_Text.style.display='none'; Codehighlighter1_1816_2209_Closed_Image.style.display='inline'; Codehighlighter1_1816_2209_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1816_2209_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1816_2209_Closed_Text.style.display='none'; Codehighlighter1_1816_2209_Open_Image.style.display='inline'; Codehighlighter1_1816_2209_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Message&nbsp;</span><span id="Codehighlighter1_1816_2209_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1816_2209_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">54</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">55</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;HELLO&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />
</span><span style="color: #008080">56</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;GOODBYE&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;<br />
</span><span style="color: #008080">57</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">58</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;message;<br />
</span><span style="color: #008080">59</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">60</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;status;<br />
</span><span style="color: #008080">61</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">62</span><span style="color: #000000"><img id="Codehighlighter1_1977_2005_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1977_2005_Open_Text.style.display='none'; Codehighlighter1_1977_2005_Closed_Image.style.display='inline'; Codehighlighter1_1977_2005_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1977_2005_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1977_2005_Closed_Text.style.display='none'; Codehighlighter1_1977_2005_Open_Image.style.display='inline'; Codehighlighter1_1977_2005_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getMessage()&nbsp;</span><span id="Codehighlighter1_1977_2005_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1977_2005_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">63</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.message;<br />
</span><span style="color: #008080">64</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">65</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">66</span><span style="color: #000000"><img id="Codehighlighter1_2049_2080_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2049_2080_Open_Text.style.display='none'; Codehighlighter1_2049_2080_Closed_Image.style.display='inline'; Codehighlighter1_2049_2080_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_2049_2080_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2049_2080_Closed_Text.style.display='none'; Codehighlighter1_2049_2080_Open_Image.style.display='inline'; Codehighlighter1_2049_2080_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setMessage(String&nbsp;message)&nbsp;</span><span id="Codehighlighter1_2049_2080_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_2049_2080_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">67</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.message&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;message;<br />
</span><span style="color: #008080">68</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">69</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">70</span><span style="color: #000000"><img id="Codehighlighter1_2108_2135_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2108_2135_Open_Text.style.display='none'; Codehighlighter1_2108_2135_Closed_Image.style.display='inline'; Codehighlighter1_2108_2135_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_2108_2135_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2108_2135_Closed_Text.style.display='none'; Codehighlighter1_2108_2135_Open_Image.style.display='inline'; Codehighlighter1_2108_2135_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;getStatus()&nbsp;</span><span id="Codehighlighter1_2108_2135_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_2108_2135_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">71</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.status;<br />
</span><span style="color: #008080">72</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">73</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">74</span><span style="color: #000000"><img id="Codehighlighter1_2174_2203_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2174_2203_Open_Text.style.display='none'; Codehighlighter1_2174_2203_Closed_Image.style.display='inline'; Codehighlighter1_2174_2203_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_2174_2203_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2174_2203_Closed_Text.style.display='none'; Codehighlighter1_2174_2203_Open_Image.style.display='inline'; Codehighlighter1_2174_2203_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setStatus(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;status)&nbsp;</span><span id="Codehighlighter1_2174_2203_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_2174_2203_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">75</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.status&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;status;<br />
</span><span style="color: #008080">76</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">77</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">78</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">79</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">80</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
</font><br />
输出：<br />
<br />
<font style="background-color: #cce8cf">Hello World<br />
Goodbye cruel world</font><br /><img src ="http://www.blogjava.net/apple0668/aggbug/309883.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/apple0668/" target="_blank">apple0668</a> 2010-01-17 21:08 <a href="http://www.blogjava.net/apple0668/archive/2010/01/17/309883.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java日期时间运算</title><link>http://www.blogjava.net/apple0668/archive/2009/03/19/260902.html</link><dc:creator>apple0668</dc:creator><author>apple0668</author><pubDate>Thu, 19 Mar 2009 13:56:00 GMT</pubDate><guid>http://www.blogjava.net/apple0668/archive/2009/03/19/260902.html</guid><wfw:comment>http://www.blogjava.net/apple0668/comments/260902.html</wfw:comment><comments>http://www.blogjava.net/apple0668/archive/2009/03/19/260902.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/apple0668/comments/commentRss/260902.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/apple0668/services/trackbacks/260902.html</trackback:ping><description><![CDATA[<p><font style="background-color: #c7edcc">今天处理一个Java日期时间运算问题：<br />
尝试过几种方法，觉得还是如下方法处理比较灵活，代码如下：<br />
</p>
<p>&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;org.mmc.date.cal;<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.Date;<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.Calendar;<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.GregorianCalendar;<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.text.SimpleDateFormat;<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img id="Codehighlighter1_169_1044_Open_Image" onclick="this.style.display='none'; Codehighlighter1_169_1044_Open_Text.style.display='none'; Codehighlighter1_169_1044_Closed_Image.style.display='inline'; Codehighlighter1_169_1044_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_169_1044_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_169_1044_Closed_Text.style.display='none'; Codehighlighter1_169_1044_Open_Image.style.display='inline'; Codehighlighter1_169_1044_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;DateCal&nbsp;</span><span id="Codehighlighter1_169_1044_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_169_1044_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;Date&nbsp;date&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Date();<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;GregorianCalendar&nbsp;gc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;GregorianCalendar();<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;SimpleDateFormat&nbsp;&nbsp;sf&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;SimpleDateFormat(</span><span style="color: #000000">"</span><span style="color: #000000">yyyy-MM-dd&nbsp;HH:MM:ss</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img id="Codehighlighter1_315_419_Open_Image" onclick="this.style.display='none'; Codehighlighter1_315_419_Open_Text.style.display='none'; Codehighlighter1_315_419_Closed_Image.style.display='inline'; Codehighlighter1_315_419_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_315_419_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_315_419_Closed_Text.style.display='none'; Codehighlighter1_315_419_Open_Image.style.display='inline'; Codehighlighter1_315_419_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_315_419_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**&nbsp;*/</span><span id="Codehighlighter1_315_419_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
</span><span style="color: #008080">12</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />
</span><span style="color: #008080">13</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;gc.add(1,1)年份加1<br />
</span><span style="color: #008080">14</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;gc.add(2,1)月份加1<br />
</span><span style="color: #008080">15</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;gc.add(3,1)周加1<br />
</span><span style="color: #008080">16</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;gc.add(5,1)天加1<br />
</span><span style="color: #008080">17</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;如果为-1表示是减<br />
</span><span style="color: #008080">18</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getDateCal(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;d,</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;beforeMonth)<br />
</span><span style="color: #008080">20</span><span style="color: #000000"><img id="Codehighlighter1_471_631_Open_Image" onclick="this.style.display='none'; Codehighlighter1_471_631_Open_Text.style.display='none'; Codehighlighter1_471_631_Closed_Image.style.display='inline'; Codehighlighter1_471_631_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_471_631_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_471_631_Closed_Text.style.display='none'; Codehighlighter1_471_631_Open_Image.style.display='inline'; Codehighlighter1_471_631_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_471_631_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_471_631_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">21</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gc.setTime(date);<br />
</span><span style="color: #008080">22</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gc.add(d,beforeMonth);<br />
</span><span style="color: #008080">23</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gc.set(gc.get(Calendar.YEAR),gc.get(Calendar.MONTH),gc.get(Calendar.DATE));<br />
</span><span style="color: #008080">24</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;sf.format(gc.getTime());<br />
</span><span style="color: #008080">25</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">26</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getCurrentDate()<br />
</span><span style="color: #008080">27</span><span style="color: #000000"><img id="Codehighlighter1_666_695_Open_Image" onclick="this.style.display='none'; Codehighlighter1_666_695_Open_Text.style.display='none'; Codehighlighter1_666_695_Closed_Image.style.display='inline'; Codehighlighter1_666_695_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_666_695_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_666_695_Closed_Text.style.display='none'; Codehighlighter1_666_695_Open_Image.style.display='inline'; Codehighlighter1_666_695_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_666_695_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_666_695_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">28</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;sf.format(date);<br />
</span><span style="color: #008080">29</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">30</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;&nbsp;main(String[]&nbsp;args)<br />
</span><span style="color: #008080">31</span><span style="color: #000000"><img id="Codehighlighter1_740_1041_Open_Image" onclick="this.style.display='none'; Codehighlighter1_740_1041_Open_Text.style.display='none'; Codehighlighter1_740_1041_Closed_Image.style.display='inline'; Codehighlighter1_740_1041_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_740_1041_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_740_1041_Closed_Text.style.display='none'; Codehighlighter1_740_1041_Open_Image.style.display='inline'; Codehighlighter1_740_1041_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_740_1041_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_740_1041_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">32</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateCal&nbsp;ud</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;DateCal();<br />
</span><span style="color: #008080">33</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">当前时间&nbsp;&nbsp;：</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">ud.getCurrentDate());<br />
</span><span style="color: #008080">34</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">前一年&nbsp;&nbsp;&nbsp;&nbsp;：</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">ud.getDateCal(</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">));<br />
</span><span style="color: #008080">35</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">前一个月&nbsp;&nbsp;：</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">ud.getDateCal(</span><span style="color: #000000">2</span><span style="color: #000000">,</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">));<br />
</span><span style="color: #008080">36</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">前一个星期：</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">ud.getDateCal(</span><span style="color: #000000">3</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">));<br />
</span><span style="color: #008080">37</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">前一天&nbsp;&nbsp;&nbsp;&nbsp;：</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">ud.getDateCal(</span><span style="color: #000000">5</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">));<br />
</span><span style="color: #008080">38</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">39</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
</span><span style="color: #008080">40</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">41</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;<br />
</span><span style="color: #008080">42</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
<p><br />
输出结果：<br />
<br />
<font style="background-color: #c7edcc"><font style="background-color: #c7edcc">当前时间&nbsp; ：2009-03-19 21:03:48<br />
前一年&nbsp;&nbsp;&nbsp; ：2008-03-19 21:03:48<br />
前一个月&nbsp; ：2009-02-19 21:02:48<br />
前一个星期：2009-03-12 21:03:48<br />
前一天&nbsp;&nbsp;&nbsp; ：2009-03-18 21:03:48<br />
分析：<br />
深入<font style="background-color: #c7edcc">GregorianCalendar</font>中的add方法源码，代码比较长想研究的自己看源代码。<br />
</font></font><br />
<br />
</font>&nbsp;</p><img src ="http://www.blogjava.net/apple0668/aggbug/260902.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/apple0668/" target="_blank">apple0668</a> 2009-03-19 21:56 <a href="http://www.blogjava.net/apple0668/archive/2009/03/19/260902.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java中使用功能强悍的正则表达式</title><link>http://www.blogjava.net/apple0668/archive/2008/12/06/244820.html</link><dc:creator>apple0668</dc:creator><author>apple0668</author><pubDate>Sat, 06 Dec 2008 15:42:00 GMT</pubDate><guid>http://www.blogjava.net/apple0668/archive/2008/12/06/244820.html</guid><wfw:comment>http://www.blogjava.net/apple0668/comments/244820.html</wfw:comment><comments>http://www.blogjava.net/apple0668/archive/2008/12/06/244820.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/apple0668/comments/commentRss/244820.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/apple0668/services/trackbacks/244820.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最近深入看struts2的validation校验框架，看到底层的很多的实现都用到正则表达式来实现。其中用得比较多的是两个类，一个是java.util.regex.Matcher和java.util.regex.Pattern&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&...&nbsp;&nbsp;<a href='http://www.blogjava.net/apple0668/archive/2008/12/06/244820.html'>阅读全文</a><img src ="http://www.blogjava.net/apple0668/aggbug/244820.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/apple0668/" target="_blank">apple0668</a> 2008-12-06 23:42 <a href="http://www.blogjava.net/apple0668/archive/2008/12/06/244820.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2设置开发模式控制台错误信息</title><link>http://www.blogjava.net/apple0668/archive/2008/12/03/244209.html</link><dc:creator>apple0668</dc:creator><author>apple0668</author><pubDate>Wed, 03 Dec 2008 13:34:00 GMT</pubDate><guid>http://www.blogjava.net/apple0668/archive/2008/12/03/244209.html</guid><wfw:comment>http://www.blogjava.net/apple0668/comments/244209.html</wfw:comment><comments>http://www.blogjava.net/apple0668/archive/2008/12/03/244209.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/apple0668/comments/commentRss/244209.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/apple0668/services/trackbacks/244209.html</trackback:ping><description><![CDATA[在使用struts2中，为了方便调试，通常struts.properties文件中把开发模式设置为true。当表单里面的数据为空的时候提交，由于配置了validation校验框架，页面被拦截，有提示信息。控制台输出如下：<br />
<font style="background-color: #c7edcc">2008-12-3 21:10:39 com.opensymphony.xwork2.interceptor.ParametersInterceptor setParameters<br />
严重: ParametersInterceptor - [setParameters]: Unexpected Exception caught setting 'age' on 'class org.mmc.struts2.action.RegisterAction: Error setting expression 'age' with value '[Ljava.lang.String;@b70648'<br />
2008-12-3 21:10:39 com.opensymphony.xwork2.validator.ActionValidatorManagerFactory &lt;clinit&gt;<br />
信息: Detected AnnotationActionValidatorManager, initializing it...</font><br />
<br />
控制台出错信息分析：<br />
由于配置文件中继承了<font style="background-color: #c7edcc">struts-default</font>.xml文件<br />
其中struts-default.xml中的代码片段为：<br />
<font style="background-color: #c7edcc">&lt;interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/&gt;<br />
<br />
由于配置了validation校验框架部分片段：<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">field&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="age"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">field-validator&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="required"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">message</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">age&nbsp;should&nbsp;not&nbsp;be&nbsp;blank!</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">message</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">field-validator</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">field-validator&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="int"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="min"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">1</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="max"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">150</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">message</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">age&nbsp;should&nbsp;be&nbsp;between&nbsp;${min}&nbsp;and&nbsp;${max}</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">message</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">field-validator</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">field</span><span style="color: #0000ff">&gt;</span></div>
原因是输入类型不匹配，这个出错信息是由于开发模式设置为true，把开发模式设置为false就不会产生这个错误信息。<span class="Apple-style-span" style="word-spacing: 0px; font: 14px/22px verdana; text-transform: none; color: rgb(0,0,0); text-indent: 28px; white-space: normal; letter-spacing: normal; border-collapse: separate; text-align: left; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0">这个是LOG给的控制台错误，方便用户调试使用，并不影响程序的正常运行。</span><br />
</font><img src ="http://www.blogjava.net/apple0668/aggbug/244209.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/apple0668/" target="_blank">apple0668</a> 2008-12-03 21:34 <a href="http://www.blogjava.net/apple0668/archive/2008/12/03/244209.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>深入struts2中validation校验框架的原理和使用(二) </title><link>http://www.blogjava.net/apple0668/archive/2008/11/29/243462.html</link><dc:creator>apple0668</dc:creator><author>apple0668</author><pubDate>Sat, 29 Nov 2008 13:35:00 GMT</pubDate><guid>http://www.blogjava.net/apple0668/archive/2008/11/29/243462.html</guid><wfw:comment>http://www.blogjava.net/apple0668/comments/243462.html</wfw:comment><comments>http://www.blogjava.net/apple0668/archive/2008/11/29/243462.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/apple0668/comments/commentRss/243462.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/apple0668/services/trackbacks/243462.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在struts2中使用validation校验框架，如果想对某个类似于execute方法进行校验，xml的校验文件的命名规则为action名-方法名-validation.xml，对应action中继承另外一个action两者都有校验xml，那么校验顺序如下：<br />
RegisterAction extends BaseAction，如果两个action里面要对方法进行校验，那校验文件的搜索路径如下：<br />
<br />
BaseAction-validation.xml，BaseAction-Xxx-validation.xml，RegisterAction-validation.xml，Register-Xxx-validation.xml<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 短路校验，在字段校验或者非字段校验中加入：short-circuit=<span class="code-quote" style="color: rgb(0,145,0)">"true"</span>，<span class="Apple-style-span" style="word-spacing: 0px; font: 11px/16px Verdana; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; text-align: left; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0"><span style="font-size: 14pt"><span class="Apple-style-span" style="word-spacing: 0px; font: 12pt/16px Verdana; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; text-align: left; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0">如果某个被标记为短路的校验器失败了,将会阻止其他后续的校验器的进行,然后一个错误(action错误或者字段错误,取决于校验器的类型)将会被添加到被校验的对象的ValidationContext中</span></span></span>：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class="Apple-style-span" style="word-spacing: 0px; font: 11px/13px Courier; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; text-align: left; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0">
<pre class="code-xml" style="padding-right: 0px; overflow-y: auto; padding-left: 0px; overflow-x: auto; padding-bottom: 0px; margin: 5px 5px 5px 15px; padding-top: 0px; text-align: left">&lt;!DOCTYPE validators PUBLIC
<span class="code-quote" style="color: rgb(0,145,0)">"-//OpenSymphony Group//XWork Validator 1.0.2//EN"</span>
<span class="code-quote" style="color: rgb(0,145,0)">"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"</span>&gt;
<span class="code-tag" style="color: rgb(0,0,145)">&lt;validators&gt;</span>
<span class="code-tag" style="color: rgb(0,0,145)"><span class="code-comment" style="color: rgb(128,128,128)">&lt;!-- Field Validators for email field --&gt;</span></span>
<span class="code-tag" style="color: rgb(0,0,145)">&lt;field name=<span class="code-quote" style="color: rgb(0,145,0)">"email"</span>&gt;</span>
<span class="code-tag" style="color: rgb(0,0,145)">&lt;field-validator type=<span class="code-quote" style="color: rgb(0,145,0)">"required"</span> short-circuit=<span class="code-quote" style="color: rgb(0,145,0)">"true"</span>&gt;</span>
<span class="code-tag" style="color: rgb(0,0,145)">&lt;message&gt;</span>You must enter a value for email.<span class="code-tag" style="color: rgb(0,0,145)">&lt;/message&gt;</span>
<span class="code-tag" style="color: rgb(0,0,145)">&lt;/field-validator&gt;</span>
<span class="code-tag" style="color: rgb(0,0,145)">&lt;field-validator type=<span class="code-quote" style="color: rgb(0,145,0)">"email"</span> short-circuit=<span class="code-quote" style="color: rgb(0,145,0)">"true"</span>&gt;</span>
<span class="code-tag" style="color: rgb(0,0,145)">&lt;message&gt;</span>Not a valid e-mail.<span class="code-tag" style="color: rgb(0,0,145)">&lt;/message&gt;</span>
<span class="code-tag" style="color: rgb(0,0,145)">&lt;/field-validator&gt;</span>
<span class="code-tag" style="color: rgb(0,0,145)">&lt;/field&gt;</span>
<span class="code-tag" style="color: rgb(0,0,145)"><span class="code-comment" style="color: rgb(128,128,128)">&lt;!-- Field Validators for email2 field --&gt;</span></span>
<span class="code-tag" style="color: rgb(0,0,145)">&lt;field name=<span class="code-quote" style="color: rgb(0,145,0)">"email2"</span>&gt;</span>
<span class="code-tag" style="color: rgb(0,0,145)">&lt;field-validator type=<span class="code-quote" style="color: rgb(0,145,0)">"required"</span>&gt;</span>
<span class="code-tag" style="color: rgb(0,0,145)">&lt;message&gt;</span>You must enter a value for email2.<span class="code-tag" style="color: rgb(0,0,145)">&lt;/message&gt;</span>
<span class="code-tag" style="color: rgb(0,0,145)">&lt;/field-validator&gt;</span>
<span class="code-tag" style="color: rgb(0,0,145)">&lt;field-validator type=<span class="code-quote" style="color: rgb(0,145,0)">"email"</span>&gt;</span>
<span class="code-tag" style="color: rgb(0,0,145)">&lt;message&gt;</span>Not a valid e-mail2.<span class="code-tag" style="color: rgb(0,0,145)">&lt;/message&gt;</span>
<span class="code-tag" style="color: rgb(0,0,145)">&lt;/field-validator&gt;</span>
<span class="code-tag" style="color: rgb(0,0,145)">&lt;/field&gt;</span>
<span class="code-tag" style="color: rgb(0,0,145)"><span class="code-comment" style="color: rgb(128,128,128)">&lt;!-- Plain Validator 1 --&gt;</span></span>
<span class="code-tag" style="color: rgb(0,0,145)">&lt;validator type=<span class="code-quote" style="color: rgb(0,145,0)">"expression"</span>&gt;</span>
<span class="code-tag" style="color: rgb(0,0,145)">&lt;param name=<span class="code-quote" style="color: rgb(0,145,0)">"expression"</span>&gt;</span>email.equals(email2)<span class="code-tag" style="color: rgb(0,0,145)">&lt;/param&gt;</span>
<span class="code-tag" style="color: rgb(0,0,145)">&lt;message&gt;</span>Email not the same as email2<span class="code-tag" style="color: rgb(0,0,145)">&lt;/message&gt;</span>
<span class="code-tag" style="color: rgb(0,0,145)">&lt;/validator&gt;</span>
<span class="code-tag" style="color: rgb(0,0,145)"><span class="code-comment" style="color: rgb(128,128,128)">&lt;!-- Plain Validator 2 --&gt;</span></span>
<span class="code-tag" style="color: rgb(0,0,145)">&lt;validator type=<span class="code-quote" style="color: rgb(0,145,0)">"expression"</span> short-circuit=<span class="code-quote" style="color: rgb(0,145,0)">"true"</span>&gt;</span>
<span class="code-tag" style="color: rgb(0,0,145)">&lt;param name=<span class="code-quote" style="color: rgb(0,145,0)">"expression"</span>&gt;</span>email.startsWith('mark')<span class="code-tag" style="color: rgb(0,0,145)">&lt;/param&gt;</span>
<span class="code-tag" style="color: rgb(0,0,145)">&lt;message&gt;</span>Email does not start with mark<span class="code-tag" style="color: rgb(0,0,145)">&lt;/message&gt;</span>
<span class="code-tag" style="color: rgb(0,0,145)">&lt;/validator&gt;</span>
<span class="code-tag" style="color: rgb(0,0,145)">&lt;/validators&gt;</span></pre>
</span><span class="Apple-style-span" style="word-spacing: 0px; font: 12pt/16px Verdana; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; text-align: left; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0">
<p style="padding-right: 0px; padding-left: 0px; font-weight: normal; font-size: 11px; padding-bottom: 0px; margin: 16px 0px; color: rgb(0,0,0); line-height: 16px; padding-top: 0px; font-family: Verdana, arial, sans-serif">在上面的例子中,实际的校验器执行是这样的:</p>
<ol style="margin-top: 2px; margin-bottom: 2px; padding-bottom: 0px; padding-top: 0px">
    <li>Plain Validator 1</li>
    <li>Plain Validator 2</li>
    <li>email字段的字段校验器</li>
    <li>email2字段的字段校验器</li>
</ol>
<p style="padding-right: 0px; padding-left: 0px; font-weight: normal; font-size: 11px; padding-bottom: 0px; margin: 16px 0px; color: rgb(0,0,0); line-height: 16px; padding-top: 0px; font-family: Verdana, arial, sans-serif"><span style="font-size: 12pt">因为普通校验器2是短路的,如果它的校验失败,它会导致email字段的校验器和email2字段的校验器不会被执行.</span></p>
</span><br /><img src ="http://www.blogjava.net/apple0668/aggbug/243462.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/apple0668/" target="_blank">apple0668</a> 2008-11-29 21:35 <a href="http://www.blogjava.net/apple0668/archive/2008/11/29/243462.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>深入struts2中validation校验框架的原理和使用(一)</title><link>http://www.blogjava.net/apple0668/archive/2008/11/28/243354.html</link><dc:creator>apple0668</dc:creator><author>apple0668</author><pubDate>Fri, 28 Nov 2008 14:56:00 GMT</pubDate><guid>http://www.blogjava.net/apple0668/archive/2008/11/28/243354.html</guid><wfw:comment>http://www.blogjava.net/apple0668/comments/243354.html</wfw:comment><comments>http://www.blogjava.net/apple0668/archive/2008/11/28/243354.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/apple0668/comments/commentRss/243354.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/apple0668/services/trackbacks/243354.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在struts2中如果action继承ActionSupport，就可以重写public void validate() 方法，如果是想校验某个方法则如下：public String login() throws Exception {....................};则校验...&nbsp;&nbsp;<a href='http://www.blogjava.net/apple0668/archive/2008/11/28/243354.html'>阅读全文</a><img src ="http://www.blogjava.net/apple0668/aggbug/243354.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/apple0668/" target="_blank">apple0668</a> 2008-11-28 22:56 <a href="http://www.blogjava.net/apple0668/archive/2008/11/28/243354.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2中action和field级别错误处理</title><link>http://www.blogjava.net/apple0668/archive/2008/11/27/243108.html</link><dc:creator>apple0668</dc:creator><author>apple0668</author><pubDate>Thu, 27 Nov 2008 14:44:00 GMT</pubDate><guid>http://www.blogjava.net/apple0668/archive/2008/11/27/243108.html</guid><wfw:comment>http://www.blogjava.net/apple0668/comments/243108.html</wfw:comment><comments>http://www.blogjava.net/apple0668/archive/2008/11/27/243108.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/apple0668/comments/commentRss/243108.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/apple0668/services/trackbacks/243108.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在struts2中，一般的action都继承ActionSupport这个类，可以重写<font style="background-color: #c7edcc">public void validate()</font>来进行数据校验，对应提示信息来说一般有两个比较常用的方法就是<font style="background-color: #c7edcc">this.addFieldError("field name","error message"); 和 this.addActionError("error message");两个方法。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 由于在ActionSupport这个类实现了<font style="background-color: #c7edcc">ValidationAware</font>接口，接口里面声明了这两个方法:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">1</span><img id="Codehighlighter1_50_112_Open_Image" onclick="this.style.display='none'; Codehighlighter1_50_112_Open_Text.style.display='none'; Codehighlighter1_50_112_Closed_Image.style.display='inline'; Codehighlighter1_50_112_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_50_112_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_50_112_Closed_Text.style.display='none'; Codehighlighter1_50_112_Open_Image.style.display='inline'; Codehighlighter1_50_112_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;addActionError(String&nbsp;anErrorMessage)&nbsp;</span><span id="Codehighlighter1_50_112_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_50_112_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;validationAware.addActionError(anErrorMessage);<br />
</span><span style="color: #008080">3</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">4</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">5</span><span style="color: #000000"><img id="Codehighlighter1_165_223_Open_Image" onclick="this.style.display='none'; Codehighlighter1_165_223_Open_Text.style.display='none'; Codehighlighter1_165_223_Closed_Image.style.display='inline'; Codehighlighter1_165_223_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_165_223_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_165_223_Closed_Text.style.display='none'; Codehighlighter1_165_223_Open_Image.style.display='inline'; Codehighlighter1_165_223_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;addActionMessage(String&nbsp;aMessage)&nbsp;</span><span id="Codehighlighter1_165_223_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_165_223_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">6</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;validationAware.addActionMessage(aMessage);<br />
</span><span style="color: #008080">7</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
<br />
而<font style="background-color: #c7edcc">ValidationAwareSupport</font>实现了<font style="background-color: #c7edcc">ValidationAware</font>接口，通过查看<font style="background-color: #c7edcc">ValidationAwareSupport</font>源码中的两个错误提示方法：<br />
<font style="background-color: #c7edcc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private Collection actionErrors;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private Map fieldErrors;<br />
<br />
</font>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img id="Codehighlighter1_78_391_Open_Image" onclick="this.style.display='none'; Codehighlighter1_78_391_Open_Text.style.display='none'; Codehighlighter1_78_391_Closed_Image.style.display='inline'; Codehighlighter1_78_391_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_78_391_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_78_391_Closed_Text.style.display='none'; Codehighlighter1_78_391_Open_Image.style.display='inline'; Codehighlighter1_78_391_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">synchronized</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;addFieldError(String&nbsp;fieldName,&nbsp;String&nbsp;errorMessage)&nbsp;</span><span id="Codehighlighter1_78_391_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_78_391_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;Map&nbsp;errors&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;internalGetFieldErrors();<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;thisFieldErrors&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(List)&nbsp;errors.get(fieldName);<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img id="Codehighlighter1_232_341_Open_Image" onclick="this.style.display='none'; Codehighlighter1_232_341_Open_Text.style.display='none'; Codehighlighter1_232_341_Closed_Image.style.display='inline'; Codehighlighter1_232_341_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_232_341_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_232_341_Closed_Text.style.display='none'; Codehighlighter1_232_341_Open_Image.style.display='inline'; Codehighlighter1_232_341_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(thisFieldErrors&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_232_341_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_232_341_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;thisFieldErrors&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ArrayList();<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;errors.put(fieldName,&nbsp;thisFieldErrors);<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;thisFieldErrors.add(errorMessage);<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
<br />
</font>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">1</span><img id="Codehighlighter1_63_124_Open_Image" onclick="this.style.display='none'; Codehighlighter1_63_124_Open_Text.style.display='none'; Codehighlighter1_63_124_Closed_Image.style.display='inline'; Codehighlighter1_63_124_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_63_124_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_63_124_Closed_Text.style.display='none'; Codehighlighter1_63_124_Open_Image.style.display='inline'; Codehighlighter1_63_124_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">synchronized</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;addActionError(String&nbsp;anErrorMessage)&nbsp;</span><span id="Codehighlighter1_63_124_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_63_124_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">2</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;internalGetActionErrors().add(anErrorMessage);<br />
</span><span style="color: #008080">3</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">4</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
<p><br />
注：由于fielderrors级别是Map类型，所以<font style="background-color: #c7edcc">this.addFieldError("field name","error message"); </font>，而actionerror级别是Collection级别，所以this.addActionError("error message");<br />
<br />
在实际的项目开发应用中如果同时用到field和action错误级别的时候，在jsp页面中的表单有用到struts2的标签来实现的话，就有可能对于同一个表单，既有filed级别error提示又有action级别的error提示，这时，可以根据项目的实际需要来取舍，但是如果两个都要同时存在的时候，只显示action级别的error，而不显示field级别的action，由于struts2标签默认就是显示field级别的error，所以要修改模板，加入theme="simple"即可,这时struts2表单那标签默认的显示field错误提示失效，使用这个模板的好处还可以和普通的html一样随便设计版面。例如：<font style="background-color: #c7edcc">&lt;s:form action="RegisterAction"theme="simple" &gt;</font><br />
PS：要显示action级别的错误提示，需要在jsp页面中的表单里面加入<font style="background-color: #c7edcc">&lt;s:actionerror/&gt;。</font></p>
<p>&nbsp;</p><img src ="http://www.blogjava.net/apple0668/aggbug/243108.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/apple0668/" target="_blank">apple0668</a> 2008-11-27 22:44 <a href="http://www.blogjava.net/apple0668/archive/2008/11/27/243108.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jasperreport报表中解决pdf的中文问题手记</title><link>http://www.blogjava.net/apple0668/archive/2008/11/19/241490.html</link><dc:creator>apple0668</dc:creator><author>apple0668</author><pubDate>Wed, 19 Nov 2008 13:11:00 GMT</pubDate><guid>http://www.blogjava.net/apple0668/archive/2008/11/19/241490.html</guid><wfw:comment>http://www.blogjava.net/apple0668/comments/241490.html</wfw:comment><comments>http://www.blogjava.net/apple0668/archive/2008/11/19/241490.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/apple0668/comments/commentRss/241490.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/apple0668/services/trackbacks/241490.html</trackback:ping><description><![CDATA[&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 由于最近要用到jasperreport来制作报表，在使用的过程中用到pdf中文问题，通过一定的设置，解决报表的pdf问题。<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 制作jasperreport报表的一个配套软件是ireport，通过可视化，简化了报表制作的难度，起到事半功倍的作用。比较轻松完成报表的制作，下面通过ireport的一些设置来解决pdf中文问题。<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 1、在项目web工程中要加入把iTextAsian.jar亚洲语言。<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 2、 在ireport中打开报表，选择要显示中文的field，如下图设置：<br />
<img height="417" alt="" src="http://www.blogjava.net/images/blogjava_net/apple0668/报表/jasperreport_cn_setting.jpg" width="512" border="0" /><br />
注：在红色方框区域配置好，编译报表成jasper文件。<br />
<br />
PS：通过两步设置，可以解决jasperreport报表中pdf显示的中文问题。<img src ="http://www.blogjava.net/apple0668/aggbug/241490.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/apple0668/" target="_blank">apple0668</a> 2008-11-19 21:11 <a href="http://www.blogjava.net/apple0668/archive/2008/11/19/241490.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>有关Vector里面元素重复解决办法</title><link>http://www.blogjava.net/apple0668/archive/2008/11/04/238721.html</link><dc:creator>apple0668</dc:creator><author>apple0668</author><pubDate>Tue, 04 Nov 2008 15:48:00 GMT</pubDate><guid>http://www.blogjava.net/apple0668/archive/2008/11/04/238721.html</guid><wfw:comment>http://www.blogjava.net/apple0668/comments/238721.html</wfw:comment><comments>http://www.blogjava.net/apple0668/archive/2008/11/04/238721.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/apple0668/comments/commentRss/238721.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/apple0668/services/trackbacks/238721.html</trackback:ping><description><![CDATA[<font style="background-color: #c7edcc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最近重构项目里面的一个功能，其中用到Vector容器，有一种情况是Vector里面含有相同的元素，造成得到的结果不是预期的，所以要去掉Vector里面的重复的元素。</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通过查看jdk文档，得知有个contains()方法，如果此向量包含指定的元素，则返回 <code>true</code>。更确切地讲，当且仅当此向量至少包含一个满足 <tt>(o==null&nbsp;?&nbsp;e==null&nbsp;:&nbsp;o.equals(e))</tt> 的元素 <code>e</code> 时，返回 <code>true</code>。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JDK原文：<br />
<h3>contains</h3>
<pre>public boolean <strong>contains</strong>(<a title="class in java.lang" href="mk:@MSITStore:E:\软件\java\jdk150.chm::/jdk150/api/java/lang/Object.html">Object</a>&nbsp;elem)</pre>
<dl>
<dd>Tests if the specified object is a component in this vector.
<p>&nbsp;</p>
<dd>
<dl>
<dt><strong>Specified by:</strong>
<dd><code><a href="mk:@MSITStore:E:\软件\java\jdk150.chm::/jdk150/api/java/util/Collection.html#contains(java.lang.Object)">contains</a></code> in interface <code><a title="interface in java.util" href="mk:@MSITStore:E:\软件\java\jdk150.chm::/jdk150/api/java/util/Collection.html">Collection</a>&lt;<a title="type parameter in Vector" href="mk:@MSITStore:E:\软件\java\jdk150.chm::/jdk150/api/java/util/Vector.html">E</a>&gt;</code>
<dt><strong>Specified by:</strong>
<dd><code><a href="mk:@MSITStore:E:\软件\java\jdk150.chm::/jdk150/api/java/util/List.html#contains(java.lang.Object)">contains</a></code> in interface <code><a title="interface in java.util" href="mk:@MSITStore:E:\软件\java\jdk150.chm::/jdk150/api/java/util/List.html">List</a>&lt;<a title="type parameter in Vector" href="mk:@MSITStore:E:\软件\java\jdk150.chm::/jdk150/api/java/util/Vector.html">E</a>&gt;</code>
<dt><strong>Overrides:</strong>
<dd><code><a href="mk:@MSITStore:E:\软件\java\jdk150.chm::/jdk150/api/java/util/AbstractCollection.html#contains(java.lang.Object)">contains</a></code> in class <code><a title="class in java.util" href="mk:@MSITStore:E:\软件\java\jdk150.chm::/jdk150/api/java/util/AbstractCollection.html">AbstractCollection</a>&lt;<a title="type parameter in Vector" href="mk:@MSITStore:E:\软件\java\jdk150.chm::/jdk150/api/java/util/Vector.html">E</a>&gt;</code></dd></dl>
<dd>
<dl>
<dt><strong>Parameters:</strong>
<dd><code>elem</code> - an object.
<dt><strong>Returns:</strong>
<dd><code>true</code> if and only if the specified object is the same as a component in this vector, as determined by the <tt>equals</tt> method; <code>false</code> otherwise.
<dd>&nbsp;
<dd>因此：可以通过该方法来实现过滤重复的元素。</dd></dl>
<p>contains方法JDK源码：<br />
</p>
<p>&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">1</span><img id="Codehighlighter1_37_74_Open_Image" onclick="this.style.display='none'; Codehighlighter1_37_74_Open_Text.style.display='none'; Codehighlighter1_37_74_Closed_Image.style.display='inline'; Codehighlighter1_37_74_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_37_74_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_37_74_Closed_Text.style.display='none'; Codehighlighter1_37_74_Open_Image.style.display='inline'; Codehighlighter1_37_74_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;contains(Object&nbsp;elem)&nbsp;</span><span id="Codehighlighter1_37_74_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_37_74_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;indexOf(elem,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">&gt;=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />
</span><span style="color: #008080">3</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
<p>&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img id="Codehighlighter1_56_303_Open_Image" onclick="this.style.display='none'; Codehighlighter1_56_303_Open_Text.style.display='none'; Codehighlighter1_56_303_Closed_Image.style.display='inline'; Codehighlighter1_56_303_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_56_303_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_56_303_Closed_Text.style.display='none'; Codehighlighter1_56_303_Open_Image.style.display='inline'; Codehighlighter1_56_303_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">synchronized</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;indexOf(Object&nbsp;elem,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;index)&nbsp;</span><span id="Codehighlighter1_56_303_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_56_303_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img id="Codehighlighter1_77_174_Open_Image" onclick="this.style.display='none'; Codehighlighter1_77_174_Open_Text.style.display='none'; Codehighlighter1_77_174_Closed_Image.style.display='inline'; Codehighlighter1_77_174_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_77_174_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_77_174_Closed_Text.style.display='none'; Codehighlighter1_77_174_Open_Image.style.display='inline'; Codehighlighter1_77_174_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(elem&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_77_174_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_77_174_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;index&nbsp;;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;elementCount&nbsp;;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(elementData[i]</span><span style="color: #000000">==</span><span style="color: #0000ff">null</span><span style="color: #000000">)<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;i;<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img id="Codehighlighter1_181_285_Open_Image" onclick="this.style.display='none'; Codehighlighter1_181_285_Open_Text.style.display='none'; Codehighlighter1_181_285_Closed_Image.style.display='inline'; Codehighlighter1_181_285_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_181_285_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_181_285_Closed_Text.style.display='none'; Codehighlighter1_181_285_Open_Image.style.display='inline'; Codehighlighter1_181_285_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_181_285_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_181_285_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;index&nbsp;;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;elementCount&nbsp;;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(elem.equals(elementData[i]))<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;i;<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">;<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
<p>注：contains方法里面返回的indexOf(Object elem, int index)方法，十分重要。<br />
</p>
<p>测试例子：<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;org.apple.collection.test;<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.Vector;<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img id="Codehighlighter1_86_516_Open_Image" onclick="this.style.display='none'; Codehighlighter1_86_516_Open_Text.style.display='none'; Codehighlighter1_86_516_Closed_Image.style.display='inline'; Codehighlighter1_86_516_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_86_516_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_86_516_Closed_Text.style.display='none'; Codehighlighter1_86_516_Open_Image.style.display='inline'; Codehighlighter1_86_516_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;VectorTest&nbsp;</span><span id="Codehighlighter1_86_516_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_86_516_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img id="Codehighlighter1_90_113_Open_Image" onclick="this.style.display='none'; Codehighlighter1_90_113_Open_Text.style.display='none'; Codehighlighter1_90_113_Closed_Image.style.display='inline'; Codehighlighter1_90_113_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_90_113_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_90_113_Closed_Text.style.display='none'; Codehighlighter1_90_113_Open_Image.style.display='inline'; Codehighlighter1_90_113_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_90_113_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**&nbsp;*/</span><span id="Codehighlighter1_90_113_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;args<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img id="Codehighlighter1_155_513_Open_Image" onclick="this.style.display='none'; Codehighlighter1_155_513_Open_Text.style.display='none'; Codehighlighter1_155_513_Closed_Image.style.display='inline'; Codehighlighter1_155_513_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_155_513_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_155_513_Closed_Text.style.display='none'; Codehighlighter1_155_513_Open_Image.style.display='inline'; Codehighlighter1_155_513_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span id="Codehighlighter1_155_513_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_155_513_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000"><br />
</span><span style="color: #008080">12</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Vector</span><span style="color: #000000">&lt;</span><span style="color: #000000">String</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;v&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Vector</span><span style="color: #000000">&lt;</span><span style="color: #000000">String</span><span style="color: #000000">&gt;</span><span style="color: #000000">();<br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Vector</span><span style="color: #000000">&lt;</span><span style="color: #000000">String</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;o&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Vector</span><span style="color: #000000">&lt;</span><span style="color: #000000">String</span><span style="color: #000000">&gt;</span><span style="color: #000000">();<br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v.add(</span><span style="color: #000000">"</span><span style="color: #000000">aaaaa</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v.add(</span><span style="color: #000000">"</span><span style="color: #000000">bbbbb</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v.add(</span><span style="color: #000000">"</span><span style="color: #000000">aaaaa</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v.add(</span><span style="color: #000000">"</span><span style="color: #000000">ccccc</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;i</span><span style="color: #000000">&lt;</span><span style="color: #000000">v.size();i</span><span style="color: #000000">++</span><span style="color: #000000">)<br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img id="Codehighlighter1_384_436_Open_Image" onclick="this.style.display='none'; Codehighlighter1_384_436_Open_Text.style.display='none'; Codehighlighter1_384_436_Closed_Image.style.display='inline'; Codehighlighter1_384_436_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_384_436_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_384_436_Closed_Text.style.display='none'; Codehighlighter1_384_436_Open_Image.style.display='inline'; Codehighlighter1_384_436_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_384_436_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_384_436_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">20</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">o.contains(v.get(i)))<br />
</span><span style="color: #008080">21</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;o.add(v.get(i));<br />
</span><span style="color: #008080">22</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">23</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;j&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;j</span><span style="color: #000000">&lt;</span><span style="color: #000000">o.size();j</span><span style="color: #000000">++</span><span style="color: #000000">)<br />
</span><span style="color: #008080">24</span><span style="color: #000000"><img id="Codehighlighter1_472_509_Open_Image" onclick="this.style.display='none'; Codehighlighter1_472_509_Open_Text.style.display='none'; Codehighlighter1_472_509_Closed_Image.style.display='inline'; Codehighlighter1_472_509_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_472_509_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_472_509_Closed_Text.style.display='none'; Codehighlighter1_472_509_Open_Image.style.display='inline'; Codehighlighter1_472_509_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_472_509_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_472_509_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">25</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(o.get(j));<br />
</span><span style="color: #008080">26</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">27</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
</span><span style="color: #008080">28</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">29</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
</span><span style="color: #008080">30</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">31</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
<p>输出结果aaaaa <font style="background-color: #c7edcc">bbbbb &nbsp;ccccc<br />
<br />
PS：所以通过contains方法可以把重复元素过滤掉。</font></p>
<dl>
<dd>&nbsp;</dd></dl></dd></dl><br />
<br /><img src ="http://www.blogjava.net/apple0668/aggbug/238721.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/apple0668/" target="_blank">apple0668</a> 2008-11-04 23:48 <a href="http://www.blogjava.net/apple0668/archive/2008/11/04/238721.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>