??xml version="1.0" encoding="utf-8" standalone="yes"?>最新欧美精品一区二区三区,日韩中文字幕av,粉嫩一区二区三区在线观看http://www.aygfsteel.com/yzth/archive/2007/12/05/165346.html怡众U技怡众U技Tue, 04 Dec 2007 16:01:00 GMThttp://www.aygfsteel.com/yzth/archive/2007/12/05/165346.htmlhttp://www.aygfsteel.com/yzth/comments/165346.htmlhttp://www.aygfsteel.com/yzth/archive/2007/12/05/165346.html#Feedback0http://www.aygfsteel.com/yzth/comments/commentRss/165346.htmlhttp://www.aygfsteel.com/yzth/services/trackbacks/165346.htmlStruts 2内嵌了Dojo工具包,实现对Ajax的支持。下面是一个用户名和密码都是Admin的Login应用?/p>

 1、在struts.xml中加入一个Action mapping

xml 代码

 

  1. <action name="showAjaxLoginForm">  
  2.        <result>/pages/ajaxlogin.jspresult>  
  3. action>  
  4.   
  5. <action name="ajaxLogin" class="net.roseindia.Login">  
  6.        <result name="input">/pages/ajaxlogin.jspresult>  
  7.        <result name="error">/pages/ajaxlogin.jspresult>  
  8.        <result>/pages/ajaxloginsuccess.jspresult>  
  9. > 

 

 2、用Ajax~写一个Login面ajaxlogin.jsp

 q个面使用?S:DIV> 标签, q个标签能通过Ajax tags载入面内容。jsp面q用了标签Q这个标{֏以利用Ajax来更形页面元素和提交一个form?/S:SUBMIT>当出现错误是Q?S:ACTIONERROR>?S:FIELDERROR>标签执行q显C错误信息?/S:FIELDERROR>

xml 代码 
  1. <%@ taglib prefix="s" uri="/struts-tags"%>  
  2. <html>  
  3.   <head>  
  4.     <s:head theme="ajax" debug="true"/>  
  5.   head>  
  6.   <body>  
  7.     <s:div id="loginDiv" theme="ajax">  
  8.     <div style="width: 300px;border-style: solid">  
  9.       <s:form action="ajaxLogin"  validate="true">  
  10.         <tr>  
  11.           <td colspan="2">  
  12.             Login   
  13.           td>  
  14.         tr>  
  15.         <tr>  
  16.           <td colspan="2">  
  17.             <s:actionerror />  
  18.             <s:fielderror />  
  19.           td>  
  20.         tr>     
  21.           <s:textfield name="username" label="Login name"/>  
  22.           <s:password name="password" label="Password"/>  
  23.           <s:submit theme="ajax" targets="loginDiv" notifyTopics="/ajaxLogin"/>       
  24.       s:form>  
  25.     div>  
  26.     s:div>  
  27.   body>  
  28. html>   

 

 3、编写一个验证用户名和密码的ActioncLogin.java

如果验证成功q回SUCCESSQ失败就q回ERROR

java 代码 
  1. package net.roseindia;   
  2.   
  3. import com.opensymphony.xwork2.ActionSupport;   
  4. import java.util.Date;   
  5.   
  6. /**  
  7.  * Validate a user login.  
  8.  */  
  9. public class Login extends ActionSupport {   
  10.   
  11.     public String execute() throws Exception {   
  12.         System.out.println("Validating login ... ...");   
  13.         System.out.println("User = " + getUsername());   
  14.         if (!getUsername().equals("Admin") || !getPassword().equals("Admin")) {   
  15.             System.out.println("Validating error ! User = " + getUsername());   
  16.             addActionError("Invalid user name or password! Please try again!");   
  17.             return ERROR;   
  18.         } else {   
  19.             System.out.println("Validating success !");   
  20.             return SUCCESS;   
  21.         }   
  22.     }   
  23.   
  24.     // ---- Username property ----   
  25.   
  26.     /**  
  27.      * Field to store User username. 
  28.      */  
  29.     private String username = null;   
  30.   
  31.     public String getUsername() {   
  32.         return username;   
  33.     }   
  34.   
  35.     public void setUsername(String value) {   
  36.         username = value;   
  37.     }   
  38.   
  39.     // ---- Username property ----   
  40.   
  41.     /**  
  42.      * Field to store User password. 
  43.      */  
  44.     private String password = null;   
  45.   
  46.     public String getPassword() {   
  47.         return password;   
  48.     }   
  49.   
  50.     public void setPassword(String value) {   
  51.         password = value;   
  52.     }   
  53.   
  54. }   

 4、编写一个登录成功页?font face="Arial">ajaxloginsuccess.jsp

xml 代码
  1. <html>  
  2.   <head>  
  3.     <title>Login Successtitle>  
  4.   head>  
  5.   <body>  
  6.     <p align="center"><font color="#000080" size="5">Login Successful !font>p>  
  7.     <h1> Welcome to <%=request.getParameter("username")%>  h1>  
  8.   body>  
  9. html>   

5、访问下面连?http://localhost:8080/s2ajax/showAjaxLoginForm.action



怡众U技 2007-12-05 00:01 发表评论
]]>
J2EE相关站点http://www.aygfsteel.com/yzth/archive/2007/12/04/165331.html怡众U技怡众U技Tue, 04 Dec 2007 15:15:00 GMThttp://www.aygfsteel.com/yzth/archive/2007/12/04/165331.htmlhttp://www.aygfsteel.com/yzth/comments/165331.htmlhttp://www.aygfsteel.com/yzth/archive/2007/12/04/165331.html#Feedback0http://www.aygfsteel.com/yzth/comments/commentRss/165331.htmlhttp://www.aygfsteel.com/yzth/services/trackbacks/165331.html 

http://www.theserverside.com
权威的的J2EE站点Q有最新的消息发布和很多技术文章以及很好的论坛Q进行J2EE相关技?br /> 的全方位的讨论,也有?sh)子书可以下载?/p>

http://www.javaworld.com
很著名的国外的java技术站炏V有一D|间由于一些原因停止了更新Q不q不久前有开始了
更新的工作?/p>

http://www-900.ibm.com/developerWorks/cn/java/index.shtml
IBM公司的developerWorks Java技术专区,有很多关于J2EE的技术文章,q且文章的质量很
高?/p>

http://www.jdon.com
国内不错的J2EE技术站点,有很多技术文章和源代码。以前推汉化的JIVE版本Q现在有
了自qJ2EE框架产品?/p>

http://www.huihoo.com
专注于中间g技术的站点和论坛,国内开源Y件做的相当不错的l织Q推Z自己的J2EE?br /> 发信? petbear (雨中的h), 信区: J2EE
?nbsp; ? J2EE学习l验和流E?br /> 发信? oosky (天天), 信区: J2EE
?nbsp; ? J2EE站点资源
发信? BBS 水木清华?(Wed Mar 31 17:23:27 2004), 转信


Java Ftp
ftp://java:java@219.224.190.248:4021 (Ƣ迎大家使用)
很多JAVA资源Q感谢前辈的工作:)

务器产品JFox以及相关?br /> OpenSource 产品?/p>

http://gceclub.sun.com.cn
SUN的中文技术社区,有SUN 的技术h员的支持l护Q很多不错的文章Q在U讲堂栏目办?br /> 很有特色。推Z?br /> 版的技术论坛,但是人气一直不是很旺?/p>

http://www.cnjsp.org
以前做过JSP的论坛,现在定位于Java技术服务,提供一些J2EE的技术文章,q不错?/p>

http://www.chinajavaworld.net
应该是国内最著名和热门的java技术站点了Q有很j2ee的信息和技术文章和很好的论坛?/p>

http://www.csdn.net
E序员都知道的网?)也把它列q来。有最新的java业界动态和技术文章可以查找?br /> http://cwiki.apache.org/S2WIKI/projects-using-webwork-or-struts2.html
自己喜欢的地方,收藏
http://sourceforge.net
很不错的开源社?/p>

怡众U技 2007-12-04 23:15 发表评论
]]>
Java Web层的下一个王者是谁?http://www.aygfsteel.com/yzth/archive/2007/12/04/165329.html怡众U技怡众U技Tue, 04 Dec 2007 15:05:00 GMThttp://www.aygfsteel.com/yzth/archive/2007/12/04/165329.htmlhttp://www.aygfsteel.com/yzth/comments/165329.htmlhttp://www.aygfsteel.com/yzth/archive/2007/12/04/165329.html#Feedback0http://www.aygfsteel.com/yzth/comments/commentRss/165329.htmlhttp://www.aygfsteel.com/yzth/services/trackbacks/165329.html作者:lgx522 发表旉Q?007q?4?9?18:04 回复此消? hspace=回复
原脓(chung)|址Q?a > http://www.jdon.com/jivejdon/thread/31553.html

 

l过数年?#8220;框架大战”QJava界的各种框架扑ֈ了自己应有的位置?br />
Spring+Hibernate+Struts已成为Java开发的L体系。在q个体系中,Spring+Hibernate的地位应该说短期内是难以撼动了。除了新兴的Jboss Seam作ؓ挑战者之外,几乎难有劲敌。有的是当?a title="??" target="_blank">Spring、Hibernate作ؓ挑战者,官方的EJB成功挑落马下Q这ơ反倒是官方的EBJ3成了挑战者,不知l局如何?br />
Java B/S~程中历来战火最Ȁ烈的其实q在Web层,框架的数量最多,争议最大?
一切由Struts而vQ?a title="??" target="_blank">Struts最l也坐稳了第一个时代的王。在技术层面,Struts 1.x已经被无Ch抱怨过、批评过Q但l于q是E_王位Q这充分说明了习惯的力量?#8220;E_压倒一?#8221;Q这句话在IT技术领域仍旧适用?
其实IT应用技术,什么新鲜玩意ƈ不难学。难的是标准化和规范化。每个程序员都有自己的思\和习惯,写出来的代码自然是五花八门。Java何以成ؓ~程界的老大Q很重要的一点在于Java的规范化。这U规范化很高的语a适用于多人合作的大型目Q便于沟通和理解Q也׃于集成和l护。Java世界Z么会框架横飞Q说到底q是规范化的需要。纯JSP?a title="??" target="_blank">Struts写Web谁快Q摆明了是JSP。那撑饱了用StrutsQ原因在?00个h写出来的JSPQ有100U写法;?00个h写出来的StrutsQ基本相伹{Struts之成功,正缘于其在Java Web层的规范化方面所做出的A(ch)献?br />
然而长江后推前浪QStruts 1.x的技术缺h竟是隐?zhn)?
Sun力推JSFQ打一雪Web层框架缺׃者R可惜JSF既要沿用Swing的技术\U,又要学ASP.NETQ还要照商的IDEQ结果搞了个四不象,弄得里外不是人。当然Sun的技术实力毕竟是强的,只要别重y?a title="??" target="_blank">EJB的覆辙,拿出点专断的_Q像q两q的NetBeansQ,做出像Swing那样水准的东西,JSF当大有作为。JSF现在比较有优势的是对Ajax的集成,q一点走在了其他框架的前面?br />
?a title="??" target="_blank">Struts更没有志气了,把WebWork换了个标{,凑出?a title="??" target="_blank">Struts2QBug多多。说实在话,Ҏ(gu)不如原版的WebWork。如果不是靠了原先的fans捧场Q根本就没得淗不q?a title="??" target="_blank">Struts原本׃是以技术取胜的Q靠的是抢占先机带来的习惯优ѝ如果原先的fans们在q两q内都能转到Struts2Q那?a title="??" target="_blank">Struts二世仍将雄霸天下?br />
lg所qͼ未来两年QJSF?a title="??" target="_blank">Struts展开Java Web框架的最l战争?
以笔者愚见,l局有二Q一是不?a title="??" target="_blank">Strutsq是JSF莯QJava Web层都结束؜战的局面,q对Java Web开发的标准化是非常有利的,q有助于巩固Java在B/S界的CQ二?a title="??" target="_blank">Struts1.x、Struts2、JSF三分天下Q必然从整体上削弱Java在B/S界的竞争力,q将q一步被RoR、ASP.NET、PHP所蚕食?br />



怡众U技 2007-12-04 23:05 发表评论
]]>
关于设计模式应用的意?/title><link>http://www.aygfsteel.com/yzth/archive/2007/12/04/165326.html</link><dc:creator>怡众U技</dc:creator><author>怡众U技</author><pubDate>Tue, 04 Dec 2007 14:48:00 GMT</pubDate><guid>http://www.aygfsteel.com/yzth/archive/2007/12/04/165326.html</guid><wfw:comment>http://www.aygfsteel.com/yzth/comments/165326.html</wfw:comment><comments>http://www.aygfsteel.com/yzth/archive/2007/12/04/165326.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/yzth/comments/commentRss/165326.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/yzth/services/trackbacks/165326.html</trackback:ping><description><![CDATA[<p> <table style="table-layout: fixed" cellspacing="2" cellpadding="2" width="100%" border="0"> <tbody> <tr> <td style="word-wrap: break-word"><span id="wmqeeuq" class="tpc_content">Design Pattern Practice<br /> <br /> 1Q序<br /> 本文从一个简单的多列排序的例子入手,由浅入深地讲解Design PatternQ设计模式)的目的、分析和实践?br /> 文中的例子用到Compositor Pattern和Decorator Pattern?br /> 同时Q文中的例子也提供了一c问题(条gl合问题Q的解决Ҏ(gu)?br /> <br /> 2Q问题的引入<br /> Design PatternQ设计模式)的目标是Q把共通问题中的不变部分和变化部分分离出来。不变的部分Q就构成了Design PatternQ设计模式)。这一点和FrameworkQ框Ӟ有些象?br /> 下面举个排序的例子,说明如何抽取问题中的不变部分?br /> 假设一个JavacRecord有field1Qfield2Qfield3{字Dc?br /> <br /> <pre><br /> <strong>public</strong> <strong>class</strong> Record{<br /> <strong>public</strong> <strong>int</strong> field1;<br /> <strong>public</strong> <strong>long</strong> field2;<br /> <strong>public</strong> <strong>double</strong> filed3;<br /> };<br /> </pre> <br /> <br /> 我们q有一个Record对象的数lRecord[] records。我们需要对q个数组按照不同的条件排序?br /> 首先Q按照field1的大从到大进行升序排序?br /> 排序函数如下Q?br /> <br /> <pre><br /> <strong>void</strong> sort(Record[] records){<br /> <strong>for</strong>(<strong>int</strong> i =…){<br /> <strong>for</strong>(<strong>int</strong> j=…){<br /> <strong>if</strong>(records[ i ].field1 > records[ j ].field1)<br /> </font><font color="#0000aa"><em>// swap records[ i ] and records[ j ]</font></em><font color="black"><br /> }<br /> }<br /> }<br /> </pre> <br /> <br /> 其次Q按照field2的大从到大进行升序排序?br /> <pre><br /> <strong>void</strong> sort(Record[] records){<br /> <strong>for</strong>(<strong>int</strong> i =…){<br /> <strong>for</strong>(<strong>int</strong> j=…){<br /> <strong>if</strong>(records[ i ].field2 > records[ j ].field2)<br /> </font><font color="#0000aa"><em>// swap records[ i ] and records[ j ]</font></em><font color="black"><br /> }<br /> }<br /> }<br /> </pre> <br /> <br /> 再次Q按照field3的大从到大进行升序排序?br /> ...<br /> q种要求太多了,我们写了太多的重复代码。我们可以看刎ͼ问题的变化部分,只有判断条g部分Q黑体的if条g判断语句Q?br /> 我们可以引入一个Comparator接口Q把q个变化的部分抽取出来?br /> <pre><br /> <strong>public</strong> <strong>interface</strong> Comparator(){<br /> <strong>public</strong> <strong>boolean</strong> greaterThan(Record a, Record b);<br /> };<br /> </pre> <br /> <br /> sort函数可以这样写Q把判断条g作ؓ参数Q:<br /> <br /> <pre><br /> <strong>void</strong> sort(Record[] records, Comparator compare){<br /> <strong>for</strong>(<strong>int</strong> i =….){<br /> <strong>for</strong>(<strong>int</strong> j=….){<br /> <strong>if</strong>(compare.greaterThen(records[ i ], records[ j ]))<br /> </font><font color="#0000aa"><em>// swap records[ i ] and records[ j ]</font></em><font color="black"><br /> }<br /> }<br /> }<br /> </pre> <br /> <br /> q样Q对应第一个要求――对records数组按照field1的大排序?br /> 我们可以做一个实现Comparator接口的CompareByField1cR?br /> <br /> <pre><br /> <strong>public</strong> <strong>class</strong> CompareByField1 implements Comparator{<br /> <strong>public</strong> <strong>boolean</strong> greaterThan(Record a, Record b){<br /> <strong>if</strong>(a.filed1 > b.filed1){<br /> <strong>return</strong> ture;<br /> }<br /> <strong>return</strong> false;<br /> }<br /> }<br /> </pre> <br /> <br /> sort函数的调用ؓQ?br /> <pre><br /> sort(records, <strong>new</strong> CompareByField1());<br /> </pre> <br /> <br /> q样Q对应第一个要求――对records数组按照field2的大排序?br /> 我们可以做一个实现Comparator接口的CompareByField2cR?br /> <pre><br /> <strong>public</strong> <strong>class</strong> CompareByField2 implements Comparator{<br /> <strong>public</strong> <strong>boolean</strong> greaterThan(Record a, Record b){<br /> <strong>if</strong>(a.filed2 > b.filed2){<br /> <strong>return</strong> ture;<br /> }<br /> <strong>return</strong> false;<br /> }<br /> }<br /> [code]<br /> <br /> sort函数的调用ؓQ?br /> [code]<br /> sort(records, <strong>new</strong> CompareByField2());<br /> </pre> <br /> <br /> 按照C++ STL的叫法,q里的sortUCؓ法QAlgorithmQ,recordsUCؓ容器Q集合)QComparatorUCؓ函数对象QFunction ObjectQ?br /> <br /> JDK的java.util.CollectionscȝsortҎ(gu)和java.util.Comparator接口是按照q样的思\设计的。下面我们来看看如何应用sort和Comparator解决多列排序问题?br /> <br /> </span></font></td> </tr> </tbody> </table> <a name="6876971"></a> <table cellspacing="0" cellpadding="0" width="100%" align="center" bgcolor="#cccccc" border="0"> <tbody> <tr> <td> <table cellspacing="1" cellpadding="4" width="100%" bgcolor="#cccccc" border="0"> <tbody> <tr bgcolor="#eae9ea"> <td valign="top" width="1%" rowspan="2"> <table cellspacing="0" cellpadding="0" width="120" border="0"> <tbody> <tr> <td><span id="menu_6876971" onmouseover="showMenu(this.id,'/jivejdon/account/accountProfile.shtml?winwidth=160&userId=42319','URL:200:200')"><a ><strong>buaawhl</strong></a> <span><br /> <br /> <a target="_blank">发表文章: 18</a> <br /> 注册旉: 2004q?7?6?10:53 </span></span></td> </tr> </tbody> </table> </td> <td> <table cellspacing="1" cellpadding="1" width="100%"> <tbody> <tr> <td width="97%"><strong>Re: q么多设计模式,我的看法和理?/strong> </td> <td noWrap width="1%">发表: 2004q?7?9?18:37 </td> <td noWrap align="center" width="1%"><a >回复</a> </td> </tr> </tbody> </table> </td> </tr> <tr bgcolor="#eae9ea"> <td valign="top" width="99%" colspan="4"> <table style="table-layout: fixed" cellspacing="2" cellpadding="2" width="100%" border="0"> <tbody> <tr> <td style="word-wrap: break-word"><span id="wmqeeuq" class="tpc_content">3Q多列排序问?br /> <br /> 3.1排序条g的数?br /> <br /> 我们知道QSQL语句能够实现强大的排序功能,能够按照不同字段的排列进行排序,也能够按照升序,降序排序。比如下面的语句?br /> order by field1 asc, field2 asc, field3 desc?br /> <br /> q个排序条g按照field1的升序,field2的升序,field3的降序排序?br /> 注意Q排在前面的字段h较高的优先?br /> 比如Q两条纪录A和BQ满_下条Ӟ<br /> Q?QA.field1 > B.field1Q(2QA.field2 < B.field2?br /> q时如果按照order by field1, field2语句排序Q那?A > B?br /> 如果上述条g中的Q?QA.field1 > B.field1变化为A.field1 == B.field1。这Ӟ条gQ?Q就会v作用。这ӞA < B?br /> <br /> 我们来看看在Java中如何实现这U灵z而强大的排序?br /> 我们q是以上一节的RecordcMؓ例。RecordcL3个字D,我们来看一看,有多种可能的排序条件?br /> Q?Q按field1排序。(2Q按field2排序。(3Q按field3排序。(4Q按field1Qfield2排序。(5Q按field1升序Q按field2降序排序…...<br /> <br /> 各种排序条g的排列组合,大概共有30U。而且Q随着字段个数的增长,排序条g的个数呈q数的增长?br /> 按照上一节的sort和ComparatorҎ(gu)Q如果我们需要达到按照Q意条件进行排序的目的Q那么我们需要ؓ每一个排序条件提供一个ComparatorQ我们需?0个ComparatorcR?-)<br /> <br /> 当然Q我们不会这么做Q我们能够进一步提取这个问题中的相同重复部分,优化我们的解x案?br /> <br /> 3.2 问题分析<br /> 我们来分析这个问题中变化的部分和不变的部分?br /> 上面所有的排序条g中,不变的部分有3部分Q?br /> Q?QA.field1和B.field1的比较,<br /> Q?QA.field2和B.field2的比较,<br /> Q?QA.field3和B.field3的比较;<br /> <br /> 变化的部分有两部分,<br /> Q?Q这三种比较条g的Q意组合排列,<br /> Q?Q升序和降序?br /> <br /> Ҏ(gu)q段分析Q我们引入两个类QReverseComparatorcdCompositeComparatorcR?br /> CompositeComparatorcȝ来解军_D늚l合排列问题?br /> ReverseComparatorcȝ来解军_D늚升序、降序问题?br /> <br /> 3.3 ReverseComparatorcȝ代码<br /> <pre><br /> <strong>import</strong> java.util.Comparator;<br /> <br /> <strong>public</strong> <strong>class</strong> ReverseComparator implements Comparator{<br /> </font><font color="#0000aa"><em>/** the original comparator*/</font></em><font color="black"><br /> <strong>private</strong> Comparator originalComparator = <strong>null</strong>;<br /> <br /> </font><font color="#0000aa"><em>/** constructor takes a comparator as parameter */</font></em><font color="black"><br /> <strong>public</strong> ReverseComparator(Comparator comparator){<br /> originalComparator = comparator;<br /> }<br /> <br /> </font><font color="#0000aa"><em>/** reverse the result of the original comparator */</font></em><font color="black"><br /> <strong>public</strong> <strong>int</strong> compare(Object o1, Object o2){<br /> <strong>return</strong> - originalComparator.compare(o1, o2);<br /> }<br /> }<br /> </pre> <br /> <br /> 3.4 CompositeComparatorcȝ代码<br /> <pre><br /> <strong>import</strong> java.util.Comparator;<br /> <strong>import</strong> java.util.Iterator;<br /> <strong>import</strong> java.util.List;<br /> <strong>import</strong> java.util.LinkedList;<br /> <br /> <strong>public</strong> <strong>class</strong> CompositeComparator implements Comparator{<br /> </font><font color="#0000aa"><em>/** in the condition list, comparators' priority decrease from head to tail */</font></em><font color="black"><br /> <strong>private</strong> List comparators = <strong>new</strong> LinkedList();<br /> <br /> </font><font color="#0000aa"><em>/** get the comparators, you can manipulate it as need.*/</font></em><font color="black"><br /> <strong>public</strong> List getComparators(){<br /> <strong>return</strong> comparators;<br /> }<br /> <br /> </font><font color="#0000aa"><em>/** add a batch of comparators to the condition list */</font></em><font color="black"><br /> <strong>public</strong> <strong>void</strong> addComparators(Comparator[] comparatorArray){<br /> <strong>if</strong>(comparatorArray == <strong>null</strong>){<br /> <strong>return</strong>;<br /> }<br /> <br /> <strong>for</strong>(<strong>int</strong> i = 0; i < comparatorArray.length; i++){<br /> comparators.add(comparatorArray[i]);<br /> }<br /> }<br /> <br /> </font><font color="#0000aa"><em>/** compare by the priority */</font></em><font color="black"><br /> <strong>public</strong> <strong>int</strong> compare(Object o1, Object o2){<br /> <strong>for</strong>(Iterator iterator = comparators.iterator(); iterator.hasNext();){<br /> Comparator comparator = (Comparator)iterator.next();<br /> <br /> <strong>int</strong> result = comparator.compare(o1, o2);<br /> <br /> <strong>if</strong>(result != 0){<br /> <strong>return</strong> result;<br /> }<br /> }<br /> <br /> <strong>return</strong> 0;<br /> }<br /> }<br /> </pre> <br /> <br /> 3.5 Comparator的组合应?br /> q一节讲qC面两个类的用法?br /> 对应前面的排序问题,我们只需?个Comparatorc:<br /> Q?QField1ComapratorQ?br /> Q?QField2ComapratorQ?br /> Q?QField3Comaprator?br /> <br /> 下面举例说明Q如何组合这些Comparator实现不同的排序条件?br /> Q?Qorder by field1, field2<br /> <br /> <pre><br /> CompoiComparator myComparator = <strong>new</strong> CompoiComparator();<br /> myComparator. addComparators(<br /> <strong>new</strong> Comparator[]{<br /> <strong>new</strong> Field1Comaprator (), <strong>new</strong> Field2Comaprator ()};<br /> );<br /> <br /> </font><font color="#0000aa"><em>// records is a list of Record</font></em><font color="black"><br /> Collections.sort(records, myComparator);<br /> <br /> Q?Qorder by field1 desc, field2<br /> <br /> CompoiComparator myComparator = <strong>new</strong> CompoiComparator();<br /> myComparator. addComparators(<br /> <strong>new</strong> Comparator[]{<br /> <strong>new</strong> ReverseComparator(<strong>new</strong> Field1Comaprator ()), <br /> <strong>new</strong> Field2Comaprator ()};<br /> );<br /> <br /> </font><font color="#0000aa"><em>// records is a list of Record</font></em><font color="black"><br /> Collections.sort(records, myComparator);<br /> <br /> </pre> <br /> <br /> q里提供的ReverseComparatorcdCompositeComparatorc都采用了Decorator Pattern?br /> CompositeComparatorcd时也是Composite Pattern?br /> <br /> 4Q过滤条件的排列l合<br /> qo条g问题也属于条件组合问题的范畴。比如JDK提供的java.io.FilecL供了一个文件过滤方法listFile(FileFilter)Q用户可以定制不同的FileFilterQ实C同的qo条gQ比如文件时间在某个范围内;文g后缀名,文g名符合某U模式;是目录,q是文gQ等{?br /> 同样Q我们可以应用上q的解决Ҏ(gu)Q实现灵zȝqo条gl合――用一个CompositeFiltercMQ意组合过滤条Ӟ用一个ReverseFiltercM为排除条件?br /> <br /> 4.1 CompositeFiltercȝ代码<br /> <pre><br /> <strong>import</strong> java.io.FileFilter;<br /> <strong>import</strong> java.io.File;<br /> <br /> <strong>import</strong> java.util.Iterator;<br /> <strong>import</strong> java.util.List;<br /> <strong>import</strong> java.util.LinkedList;<br /> <br /> <strong>public</strong> <strong>class</strong> CompositeFilter implements FileFilter {<br /> <br /> </font><font color="#0000aa"><em>/** in the filter list, every condition should be met. */</font></em><font color="black"><br /> <strong>private</strong> List filters = <strong>new</strong> LinkedList();<br /> <br /> </font><font color="#0000aa"><em>/** get the filters, you can manipulate it as need.*/</font></em><font color="black"><br /> <strong>public</strong> List getFilters(){<br /> <strong>return</strong> filters;<br /> }<br /> <br /> </font><font color="#0000aa"><em>/** add a batch of filters to the condition list */</font></em><font color="black"><br /> <strong>public</strong> <strong>void</strong> addComparators(FileFilter[] filterArray){<br /> <strong>if</strong>(filterArray == <strong>null</strong>){<br /> <strong>return</strong>;<br /> }<br /> <br /> <strong>for</strong>(<strong>int</strong> i = 0; i < filterArray.length; i++){<br /> filters.add(filterArray[i]);<br /> }<br /> }<br /> <br /> </font><font color="#0000aa"><em>/** must meet all the filter condition */</font></em><font color="black"><br /> <strong>public</strong> <strong>boolean</strong> accept(File pathname) {<br /> <strong>for</strong>(Iterator iterator = filters.iterator(); iterator.hasNext();){<br /> FileFilter filter = (FileFilter)iterator.next();<br /> <br /> <strong>boolean</strong> result = filter.accept(pathname);<br /> <br /> </font><font color="#0000aa"><em>// if any condition can not be met, return false.</font></em><font color="black"><br /> <strong>if</strong>(result == false){<br /> <strong>return</strong> false;<br /> }<br /> }<br /> <br /> </font><font color="#0000aa"><em>// all conditions are met, return true.</font></em><font color="black"><br /> <strong>return</strong> <strong>true</strong>;<br /> }<br /> }<br /> </pre> <br /> <br /> 4.2 ReverseFiltercȝ代码<br /> <br /> <pre><br /> <strong>import</strong> java.util.Comparator;<br /> <br /> <strong>public</strong> <strong>class</strong> ReverseComparator implements Comparator{<br /> </font><font color="#0000aa"><em>/** the original comparator*/</font></em><font color="black"><br /> <strong>private</strong> Comparator originalComparator = <strong>null</strong>;<br /> <br /> </font><font color="#0000aa"><em>/** constructor takes a comparator as parameter */</font></em><font color="black"><br /> <strong>public</strong> ReverseComparator(Comparator comparator){<br /> originalComparator = comparator;<br /> }<br /> <br /> </font><font color="#0000aa"><em>/** reverse the result of the original comparator */</font></em><font color="black"><br /> <strong>public</strong> <strong>int</strong> compare(Object o1, Object o2){<br /> <strong>return</strong> - originalComparator.compare(o1, o2);<br /> }<br /> }<br /> </pre> </span></font></td> </tr> </tbody> </table> </td> </tr> </tbody> </table> </td> </tr> </tbody> </table> </p> <img src ="http://www.aygfsteel.com/yzth/aggbug/165326.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/yzth/" target="_blank">怡众U技</a> 2007-12-04 22:48 <a href="http://www.aygfsteel.com/yzth/archive/2007/12/04/165326.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ͬ</a>| <a href="http://" target="_blank">Ϊ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">ӳ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ȫ</a>| <a href="http://" target="_blank">ľ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">¤</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">կ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ݳ</a>| <a href="http://" target="_blank">ᶫ</a>| <a href="http://" target="_blank">Դ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">̨</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ϫ</a>| <a href="http://" target="_blank">˲</a>| <a href="http://" target="_blank">ϰˮ</a>| <a href="http://" target="_blank">ϻ</a>| <a href="http://" target="_blank">ʡ</a>| <a href="http://" target="_blank">᰸</a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">ɽ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>