??xml version="1.0" encoding="utf-8" standalone="yes"?>91久久久精品,国产精品久久精品国产,91麻豆成人久久精品二区三区 http://www.aygfsteel.com/csnowfox/心情与技术文档同? http://hi.baidu.com/jingleqzh-cnSat, 03 May 2025 08:04:28 GMTSat, 03 May 2025 08:04:28 GMT60没钱白领逛的十大|站http://www.aygfsteel.com/csnowfox/archive/2012/02/15/370002.htmlcsnowfoxcsnowfoxWed, 15 Feb 2012 02:39:00 GMThttp://www.aygfsteel.com/csnowfox/archive/2012/02/15/370002.htmlhttp://www.aygfsteel.com/csnowfox/comments/370002.htmlhttp://www.aygfsteel.com/csnowfox/archive/2012/02/15/370002.html#Feedback0http://www.aygfsteel.com/csnowfox/comments/commentRss/370002.htmlhttp://www.aygfsteel.com/csnowfox/services/trackbacks/370002.html
作ؓC没钱的白领,没逛过q些|站Q你out了吧?/div> www.baidu.com癑ֺ。这个不用说Q工作、学习、娱乐必备站?br /> www.2008.sohu.com搜狐奥运频道?008奥运q_是中国崛L标志q。搜狐拥有奥q独家报道权Q相信会l我们带来更多奥q新闅R?br /> www.tianya.cn天论坛。上班是无聊的,论坛是有料的?br /> www.taobao.com淘宝。上班也能开一差逛逛街?br /> www.sunapp.info阛_惠购。不用花很多旉p获取D物资讯的地方?br /> www.cmfu.comL。逛完街得安静一下,看看书,一个不会完l的q蝲说让h心里有䆾牉|?br /> www.eastmoney.com东胦?007q股市疯狂培M无数新股民,白骨_们当然是其中的生力军?br /> www.xunlei.comq雷。上班下班,M有些东西是自q脑上没有的,那就q雷一下吧?br /> www.17173.com|游。上班当然不会这么过分,那下班放松一下L要的Q网渔R戯然是不了?br /> www.qzone.qq.comQQI间。让自己有一些沉淀Q让自己有一个心늚H,写下来会好点?/div>

csnowfox 2012-02-15 10:39 发表评论
]]>struts与flex通过xml交互模型http://www.aygfsteel.com/csnowfox/archive/2007/11/12/159890.htmlcsnowfoxcsnowfoxMon, 12 Nov 2007 02:27:00 GMThttp://www.aygfsteel.com/csnowfox/archive/2007/11/12/159890.htmlhttp://www.aygfsteel.com/csnowfox/comments/159890.htmlhttp://www.aygfsteel.com/csnowfox/archive/2007/11/12/159890.html#Feedback1http://www.aygfsteel.com/csnowfox/comments/commentRss/159890.htmlhttp://www.aygfsteel.com/csnowfox/services/trackbacks/159890.htmlflex-struts.rar
该代码包含两个项目,一个是web目Q一个是flex目Q用workshop+flex builder2开发,主要演示了如下几个特征:
(1).flex获取q程url的xml数据Q加载到DataGrid中。在解释数据的时候,使用了actionscript的class.
actionscript class文g代码Q?/span>
 package org.c2ome.flex.xml

 public class XmlDoc
 
{
  private 
var headStr :String = 
   
"<?xml version='1.0' ?>" + 
   
"<Msg>" + 
   
"<data>";
  private 
var footStr: String =
   
"</data>" + 
   
"</Msg>";
  private 
var contentStr: String = "";

  public 
function addData(key : String, value: String) : void {
   
var nodeStr: String = 
    
"<entry><key>" + key + "</key><value>" + value +"</value>" + "</entry>";
   contentStr 
+=nodeStr;
  }

  public 
function toXml() : XML {
   
return new XML(headStr + contentStr + footStr);
  }

  public 
function toString() :String {
   
return headStr + contentStr + footStr;
  }
 
 }

}

flexj.mxml代码Q?/p>

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
 
<mx:Script>
  
<![CDATA[
  import org.c2ome.flex.xml.XmlDoc;
  import mx.rpc.events.ResultEvent;
  import mx.controls.Alert;
  import flash.events.Event;
  import flash.net.URLLoader;
  import flash.net.URLRequest;
        private function loadApp():void {
   var loader:URLLoader = new URLLoader();
   var request:URLRequest = new URLRequest("http://localhost:8080/flexLogic.do?method=getBooks");
   var variables:URLVariables = new URLVariables();
   var x : XmlDoc = new XmlDoc();
   x.addData("name","c2one");
   x.addData("password","123456");
   variables.xmlDoc = x.toString();
   request.data = variables;
   request.method = "POST";
   loader.load(request);
   loader.addEventListener(Event.COMPLETE, onComplete);
        }
  private function onComplete(event:Event):void
  {
      var loader:URLLoader = event.target as URLLoader;
      if (loader != null) {
          var externalXML:XML = new XML(loader.data);
          bookdg.dataProvider = externalXML.data.entry.(key=="cc").value.Book;
       sysReturn.text = externalXML.data.entry.(key=="name").value.valueOf();
      }
      else {
          Alert.show("loader is not a URLLoader!");
      }
  }
  
]]>
 
</mx:Script>
 
<mx:DataGrid x="78.5" y="93" id="bookdg">
  
<mx:columns>
   
<mx:DataGridColumn headerText="name" dataField="@name"/>
   
<mx:DataGridColumn headerText="price" dataField="@price"/>
  
</mx:columns>
 
</mx:DataGrid>
 
<mx:Button x="78.5" y="292" label="Button" click="loadApp();"/>
 
<mx:TextArea x="78" y="256" height="28" width="202.5" id="sysReturn"/>
</mx:Application>
(2).在web端根目录配置跨域讉K控制Q徏文gcrossdomain.xml
<?xml version="1.0"?> 
<!DOCTYPE cross-domain-policy
SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"
>
<cross-domain-policy>
    
<allow-access-from domain="*" />
</cross-domain-policy>
(3).在web端用了betwixt来处理xml与对象,看com.c2one.util.XMLUtil
package com.c2one.util;

import java.beans.IntrospectionException;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.Map;

import org.apache.commons.betwixt.io.BeanReader;
import org.apache.commons.betwixt.io.BeanWriter;
import org.xml.sax.SAXException;

public class XMLUtil {

    
public static String beanParser(String info, String exeCode,
            Map
<String, Object> data) throws IOException, SAXException,
            IntrospectionException 
{
        String result 
= "";
        StringWriter outputWriter 
= new StringWriter();
        outputWriter.write(
"<?xml version='1.0' ?>");
        BeanWriter beanWriter 
= new BeanWriter(outputWriter);
        beanWriter.getXMLIntrospector().getConfiguration()
                .setAttributesForPrimitives(
true);
        beanWriter.getBindingConfiguration().setMapIDs(
false);
        beanWriter.enablePrettyPrint();
        ResponseEntity entity 
= new ResponseEntity(info, exeCode, data);
        beanWriter.write(
"Msg", entity);
        result 
= outputWriter.toString();
        outputWriter.close();
        
return result;
    }


    
public static RequestEntity stringParser(String str)
            
throws IntrospectionException, IOException, SAXException {
        StringReader xmlReader 
= new StringReader(str);
        BeanReader beanReader 
= new BeanReader();
        beanReader.getXMLIntrospector().getConfiguration()
                .setAttributesForPrimitives(
true);
        beanReader.getBindingConfiguration().setMapIDs(
false);
        beanReader.registerBeanClass(
"Msg", RequestEntity.class);
        RequestEntity obj 
= (RequestEntity) beanReader.parse(xmlReader);
        
return obj;
    }

}


csnowfox 2007-11-12 10:27 发表评论
]]>
跑在groovy上的rmihttp://www.aygfsteel.com/csnowfox/archive/2007/07/19/131226.htmlcsnowfoxcsnowfoxThu, 19 Jul 2007 02:43:00 GMThttp://www.aygfsteel.com/csnowfox/archive/2007/07/19/131226.htmlhttp://www.aygfsteel.com/csnowfox/comments/131226.htmlhttp://www.aygfsteel.com/csnowfox/archive/2007/07/19/131226.html#Feedback1http://www.aygfsteel.com/csnowfox/comments/commentRss/131226.htmlhttp://www.aygfsteel.com/csnowfox/services/trackbacks/131226.html  参考了|上的经典《Java RMI 入门》,我写了两个groovy文g。因为想仉Kjava的文件管理方式,所以我把接口写成一个groovy文gQ实现类写成一个groovy文g。虽然单个groovy文g名可以和里面的类名不一P但是如果出现不一LQ在import兌的时候就会出现问题?br>F:\grails_apps\groovy\com\c2\HelloIn.groovy
package com.c2;

import java.rmi.*;
interface HelloIn extends java.rmi.Remote {
 String sayHello() 
throws RemoteException;
}
F:\grails_apps\groovy\com\c2\Hello.groovy
package com.c2;

import java.rmi.*;
import java.net.*;
import java.rmi.registry.*;
import java.rmi.server.*;

class Hello extends java.rmi.server.UnicastRemoteObject implements HelloIn {
    Hello() 
throws RemoteException{
        
super();
    }

     String sayHello() 
throws RemoteException{
      
return "Hello,World!";
     }
 
     
     
static void main(args){
  
try{
      Hello h
=new Hello();
      Naming.rebind(
"hello",h);
      println 
"ready ";
   }
 catch(Exception e){
           e.printStackTrace();
   }

  }

}
  因ؓ在写rmi的时候需要通过命o?class文g中生?_Stub.class文gQ所以必Lgroovy文g通过groovyc~译?class文gQ再通过命ormic **来生?_Stub.class。另外一个要q行groovy生成?class文g需要加入groovy的相兛_。ؓ了执行q程自动化,使用了ant来处理?br>  在开启rmi的注册服务之后就可以通过ant来执行rmi了。开户rmi服务命o:rmiregistry
  在执行rmi的时候关键是ljvm加个参数-Djava.rmi.server.codebase=file:/F:\grails_apps\groovy\/Q注意,|上挺多-Djava.server.codebase的写法,q种写法在我的试验中不能通过?br>F:\grails_apps\groovy\build.xml
<project name="mygroovy-build" default="run">
    
<property environment="env"/>
    
<path id="groovy.classpath">
        
<fileset dir="C:/groovy-1.0/lib/"/>
    
</path>
    
<taskdef name ="groovyc" classname ="org.codehaus.groovy.ant.Groovyc" classpathref="groovy.classpath"/>
    
<target name="compile" description="compile groovy to bytecode">
        
<mkdir dir="classes"/>
        
<groovyc destdir="classes" srcdir="." includes="com/c2/HelloIn.groovy,com/c2/Hello.groovy" classpathref="groovy.classpath">
        
</groovyc>
    
</target>
    
<target name="mksub" depends="compile" description="make the sub">
        
<rmic classname="com.c2.Hello" base="F:/grails_apps/groovy/classes/"/>
    
</target>
    
<target name="run" depends="mksub" description="run the compiled class">
        
<java classname="com.c2.Hello" fork="true">
            
<classpath refid="groovy.classpath"/>
            
<classpath location="classes"/> 
            
<jvmarg value="-Djava.rmi.server.codebase=file:/F:\grails_apps\groovy\/" />
        
</java>
    
</target>
</project>
  可能会遇到编译时的lib问题Q如果缺什么libqset classpath吧~`q个问题我也有点疑惑,在另一台机器上使用<path id="groovy.classpath"><fileset dir="C:/groovy-1.0/lib/"/></path>不v作用Q只能在控制C事先用set classpath来加下包?/font>

csnowfox 2007-07-19 10:43 发表评论
]]>
antlr-(?用武之地之处理^衡组http://www.aygfsteel.com/csnowfox/archive/2007/06/25/126085.htmlcsnowfoxcsnowfoxMon, 25 Jun 2007 05:26:00 GMThttp://www.aygfsteel.com/csnowfox/archive/2007/06/25/126085.htmlhttp://www.aygfsteel.com/csnowfox/comments/126085.htmlhttp://www.aygfsteel.com/csnowfox/archive/2007/06/25/126085.html#Feedback0http://www.aygfsteel.com/csnowfox/comments/commentRss/126085.htmlhttp://www.aygfsteel.com/csnowfox/services/trackbacks/126085.html惛_一个正则表辑ּQ让下面code的执行结果是Q?
result(以逗号为token来分割字W串Q逗号?{"?}"里面的忽略其做ؓtoken):
a1=1  
a2
=X2{b1=1,b2=X3{c1=1,c2=2}}   
a3
=X4{b1=1}
以上问题来自 http://www.javaeye.com/post/265973

使用antlr3规则处理
grammar Spl;
options {
  output
=AST;
  ASTLabelType=CommonTree;
}
stat     :    spl
[0];
spl 
[int step]     returns [String value]:    (expr[step]  
    {    
        if ($value!
=null)
            $value +
= $expr.value;
        else
            $value 
= $expr.value;
    }) +
    
;
expr 
[int step]    returns [String value]:    a=ID '=' b=ID (| p=param[step]) c=','? 
    {
        String str 
= $a.text + "=" + $b.text;
        if (p !=null)
            str +
= $param.value;
        if ($step == 0) {
            System.out.println(str)
;
        } else {
            $value 
= str;
            if (c!=null)
                $value +
=",";
        } 
    }
    
;
param [int step] returns [String value]:    '{' spl[1] '}'
    {
        $value 
= "{" + $spl.value + "}";
    }
    
;
ID    :    ('a'..'z' | 'A'..'Z' | '
0' .. '9')('a'..'z' | 'A'..'Z' | '0' .. '9') *;
EQPARAM    :    '=';
WS    :    (' '|'\t'|'\n'|'\r') + {skip();};


csnowfox 2007-06-25 13:26 发表评论
]]>
antlr-(一)语言~译的简?/title><link>http://www.aygfsteel.com/csnowfox/archive/2007/06/19/125176.html</link><dc:creator>csnowfox</dc:creator><author>csnowfox</author><pubDate>Tue, 19 Jun 2007 11:33:00 GMT</pubDate><guid>http://www.aygfsteel.com/csnowfox/archive/2007/06/19/125176.html</guid><wfw:comment>http://www.aygfsteel.com/csnowfox/comments/125176.html</wfw:comment><comments>http://www.aygfsteel.com/csnowfox/archive/2007/06/19/125176.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/csnowfox/comments/commentRss/125176.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/csnowfox/services/trackbacks/125176.html</trackback:ping><description><![CDATA[<p>  要定义一U语aQ你只要按照antlr的语法写一?g文gQantlr便帮你完成其它的工作Q简化至极,当然我用了antlt studio工具?br>  参考了antlr的经怹c《The Definitive ANTLR Reference》写了一个小例子(姑且UCa)Q呵c?br>  我用了antlr studio 1.1.0里面提供的antlr库,可能是版本问题,使用《The Definitive ANTLR Reference》里面的四则q算的例子居焉过不了Q具汗``<br>  语法CZQ我们可以这栯入(U色为我们的输入Q黑色ؓ输出Q?/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"><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>> <span style="COLOR: red">i=4</span><br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>> <span style="COLOR: red">j=6+5*3<br></span><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>> <span style="COLOR: red">c=i+j<br></span><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>> <span style="COLOR: red">c<br></span><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>> 25<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>> <span style="COLOR: red">j<br></span><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>> 21 <br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>> <span style="COLOR: red">i = j*(3+1)</span><br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>> <span style="COLOR: red">i<br></span><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>> 84<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>> <span style="COLOR: red">#</span></div>   要实现这个语aQ我们的全部工作只要写一个antlr?g文g和一个Main试执行cR?br>  Sample.g<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.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">{<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>import java.util.HashMap</span><span style="COLOR: #008000">;//会出现在paser生成cd?br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">}<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>class SampleParser extends Parser</span><span style="COLOR: #008000">;<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">options {<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>    k </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">2</span><span style="COLOR: #008000">; //定义了编译程序对输入字符串的预测深度默认是一<img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top><br>    </span><span style="COLOR: #000000">}<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>{<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>    HashMap memory </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> new HashMap()</span><span style="COLOR: #008000">;//出现在paser生成cȝ构造函数处<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">}<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>prog: (stat) + END</span><span style="COLOR: #008000">;//使用q个antlr版本Q??号前必加? ),否则~译报错,出现的字W都必须在lexer里定义,不能出现?='q种W号<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">stat {<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>    Integer e</span><span style="COLOR: #008000">;//xaction里用到的变?br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">}:  NEWLINE<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>    | (id:ID EQ e</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">expr NEWLINE) <br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>    {memory.put(id.getText()</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"> new Integer(e))</span><span style="COLOR: #008000">;</span><span style="COLOR: #008000">}</span><span style="COLOR: #008000"><br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">    |(id1:ID NEWLINE) {<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>        Integer v </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (Integer)memory.get(id1.getText())</span><span style="COLOR: #008000">;<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">        System.out.println(v)</span><span style="COLOR: #008000">;<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">    }| (e</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">expr NEWLINE) {System.out.println(e)</span><span style="COLOR: #008000">;</span><span style="COLOR: #008000">}</span><span style="COLOR: #008000">;<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>expr returns </span><span style="FONT-WEIGHT: bold; COLOR: #800000">[</span><span style="COLOR: #800000">int value=0</span><span style="FONT-WEIGHT: bold; COLOR: #800000">]</span><span style="COLOR: #000000">{<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>    Integer e1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">e2</span><span style="COLOR: #008000">;<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">}: <br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>    (e1</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">multExpr) {value </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> e1</span><span style="COLOR: #008000">;</span><span style="COLOR: #008000">}</span><span style="COLOR: #008000"><br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">    ( ADD (e2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">multExpr) {value +</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> e2</span><span style="COLOR: #008000">;</span><span style="COLOR: #008000">}</span><span style="COLOR: #008000"><br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">    | DES (e2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">multExpr) {value -</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> e2</span><span style="COLOR: #008000">;</span><span style="COLOR: #008000">})*;</span><span style="COLOR: #008000"><br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>multExpr returns </span><span style="FONT-WEIGHT: bold; COLOR: #800000">[</span><span style="COLOR: #800000">int value=0</span><span style="FONT-WEIGHT: bold; COLOR: #800000">]</span><span style="COLOR: #000000">{<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>    Integer at1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">at2</span><span style="COLOR: #008000">;<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">}: <br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>    (at1</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">atom) {value </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> at1</span><span style="COLOR: #008000">;</span><span style="COLOR: #008000">}</span><span style="COLOR: #000000">(CH at2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">atom{value*</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">at2</span><span style="COLOR: #008000">;</span><span style="COLOR: #008000">})*;</span><span style="COLOR: #008000"><br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>atom returns </span><span style="FONT-WEIGHT: bold; COLOR: #800000">[</span><span style="COLOR: #800000">int value=0</span><span style="FONT-WEIGHT: bold; COLOR: #800000">]</span><span style="COLOR: #000000">{<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>    Integer e</span><span style="COLOR: #008000">;<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">}: <br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>    (i:INT) {<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>        value </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> Integer.parseInt(i.getText())</span><span style="COLOR: #008000">;<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">    } | (id:ID)  {<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>        Integer v </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (Integer)memory.get(id.getText())</span><span style="COLOR: #008000">;<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">        if ( v!</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">null ) value </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> v.intValue()</span><span style="COLOR: #008000">;<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">        else System.err.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">undefined variable </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+id.getText())</span><span style="COLOR: #008000">;<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">    }| (KL e</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">expr KR){<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>        value </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> e</span><span style="COLOR: #008000">;<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">    } </span><span style="COLOR: #008000">;<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>class SampleLexer extends Lexer</span><span style="COLOR: #008000">;<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">ID : ('a'..'z' |'A'..'Z' )+ </span><span style="COLOR: #008000">;<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">INT : ('</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">'..'</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">') + </span><span style="COLOR: #008000">;<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">NEWLINE: ('\r') ? '\n'</span><span style="COLOR: #008000">;<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">WS : (' ' |'\t' |'\n' |'\r' )+  </span><span style="COLOR: #008000">;<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">ADD: '+'</span><span style="COLOR: #008000">;<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">DES: '-'</span><span style="COLOR: #008000">;<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">CH: '*'</span><span style="COLOR: #008000">;<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">KL: '('</span><span style="COLOR: #008000">;<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">KR: ')'</span><span style="COLOR: #008000">;<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">EQ: '</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">'</span><span style="COLOR: #008000">;<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">END: '#'</span><span style="COLOR: #008000">;</span></div> <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.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> antlr.RecognitionException;<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> antlr.TokenStreamException;<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_90_427_Open_Image onclick="this.style.display='none'; Codehighlighter1_90_427_Open_Text.style.display='none'; Codehighlighter1_90_427_Closed_Image.style.display='inline'; Codehighlighter1_90_427_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_90_427_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_90_427_Closed_Text.style.display='none'; Codehighlighter1_90_427_Open_Image.style.display='inline'; Codehighlighter1_90_427_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Main </span><span id=Codehighlighter1_90_427_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.aygfsteel.com/Images/dot.gif"></span><span id=Codehighlighter1_90_427_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_94_117_Open_Image onclick="this.style.display='none'; Codehighlighter1_94_117_Open_Text.style.display='none'; Codehighlighter1_94_117_Closed_Image.style.display='inline'; Codehighlighter1_94_117_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_94_117_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_94_117_Closed_Text.style.display='none'; Codehighlighter1_94_117_Open_Image.style.display='inline'; Codehighlighter1_94_117_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </span><span id=Codehighlighter1_94_117_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">/** */</span><span id=Codehighlighter1_94_117_Open_Text><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/InBlock.gif" align=top>     * </span><span style="COLOR: #808080">@param</span><span style="COLOR: #008000"> args<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>     </span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_159_425_Open_Image onclick="this.style.display='none'; Codehighlighter1_159_425_Open_Text.style.display='none'; Codehighlighter1_159_425_Closed_Image.style.display='inline'; Codehighlighter1_159_425_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_159_425_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_159_425_Closed_Text.style.display='none'; Codehighlighter1_159_425_Open_Image.style.display='inline'; Codehighlighter1_159_425_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> main(String[] args) </span><span id=Codehighlighter1_159_425_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.aygfsteel.com/Images/dot.gif"></span><span id=Codehighlighter1_159_425_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/InBlock.gif" align=top>        SampleLexer lexer </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> SampleLexer(System.in);<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/InBlock.gif" align=top>        SampleParser parser </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> SampleParser(lexer);<br><img id=Codehighlighter1_278_300_Open_Image onclick="this.style.display='none'; Codehighlighter1_278_300_Open_Text.style.display='none'; Codehighlighter1_278_300_Closed_Image.style.display='inline'; Codehighlighter1_278_300_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_278_300_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_278_300_Closed_Text.style.display='none'; Codehighlighter1_278_300_Open_Image.style.display='inline'; Codehighlighter1_278_300_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>        </span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"> </span><span id=Codehighlighter1_278_300_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.aygfsteel.com/Images/dot.gif"></span><span id=Codehighlighter1_278_300_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/InBlock.gif" align=top>            parser.prog();<br><img id=Codehighlighter1_333_361_Open_Image onclick="this.style.display='none'; Codehighlighter1_333_361_Open_Text.style.display='none'; Codehighlighter1_333_361_Closed_Image.style.display='inline'; Codehighlighter1_333_361_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_333_361_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_333_361_Closed_Text.style.display='none'; Codehighlighter1_333_361_Open_Image.style.display='inline'; Codehighlighter1_333_361_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>        }</span></span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000"> (RecognitionException e) </span><span id=Codehighlighter1_333_361_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.aygfsteel.com/Images/dot.gif"></span><span id=Codehighlighter1_333_361_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/InBlock.gif" align=top>            e.printStackTrace();<br><img id=Codehighlighter1_394_422_Open_Image onclick="this.style.display='none'; Codehighlighter1_394_422_Open_Text.style.display='none'; Codehighlighter1_394_422_Closed_Image.style.display='inline'; Codehighlighter1_394_422_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_394_422_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_394_422_Closed_Text.style.display='none'; Codehighlighter1_394_422_Open_Image.style.display='inline'; Codehighlighter1_394_422_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>        }</span></span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000"> (TokenStreamException e) </span><span id=Codehighlighter1_394_422_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.aygfsteel.com/Images/dot.gif"></span><span id=Codehighlighter1_394_422_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/InBlock.gif" align=top>            e.printStackTrace();<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>        }</span></span><span style="COLOR: #000000"><br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    }</span></span><span style="COLOR: #000000"><br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div> <p> </p> <img src ="http://www.aygfsteel.com/csnowfox/aggbug/125176.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/csnowfox/" target="_blank">csnowfox</a> 2007-06-19 19:33 <a href="http://www.aygfsteel.com/csnowfox/archive/2007/06/19/125176.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>asm学习(6)--asm应用(使用jasml对antlrstudio破解)http://www.aygfsteel.com/csnowfox/archive/2007/06/17/124828.htmlcsnowfoxcsnowfoxSun, 17 Jun 2007 11:50:00 GMThttp://www.aygfsteel.com/csnowfox/archive/2007/06/17/124828.htmlhttp://www.aygfsteel.com/csnowfox/comments/124828.htmlhttp://www.aygfsteel.com/csnowfox/archive/2007/06/17/124828.html#Feedback0http://www.aygfsteel.com/csnowfox/comments/commentRss/124828.htmlhttp://www.aygfsteel.com/csnowfox/services/trackbacks/124828.html  antlrQ语a识别的一个工PanothertoolforlanguagerecognitionQ前w是pcctsQ,它提供了一个框Ӟ可以通过包含java、c++或c#动作的语法描q来构造语a识别器,~译器和解释器。antlrstudio是一Ƅ于eclipse的插Ӟ可以用来创徏、调试antlr语法的集成环境?br>  在antlrstudio的官方网站上提供的eclipse插gq没有提供相应的licence.lic文gQ所以我们还不能使用它的全部功能?br>  在CowNew开源团队网?www.cownew.com上由kingchou提出了一个破解方案,我的操作都是Zq个Ҏ的?br>  Ҏ是这hq的QAntlrStudio中antlr_Studio.license包中主要的类Q也是其抉|未注册者用的主要防线?、当插g启动时会先调用ASLicenseManagercȝcheckForLicense()?、方法checkForLicense在此调用LicenseManagercȝdaysLeft()获取剩余日期?、进而触发Licensec,其读取License.lic注册文g的信息,q会调用SignatureUtil工具cd其签名做验证。在ASLicenseManager中有一个很薄弱的环节,卻I
int i = licensemanager.daysLeft();
if (i != -2) {
      if (hasAlreadyExpired() || i <= 0)
  ……
只要daysLeft()q回gؓ-2卛_断ؓ正式用户。因而只要修改LicenseManagerImpl的daysLeft()Ҏ为:
public int daysLeft() {
      ……
      return -2;
}
  由xml1123提出的修ҎQ直接将i   赋gؓ-2
int i = licensemanager.daysLeft();
i=-2;
if (i != -2) {
 ……
  我的作法是采取了xml1123的修攏V?br>  以下描述我的修改步骤Q?br>  (1).在eclipse\plugins\AntlrStudio_1.1.0中找到AntlrStudio.jar文g。解压AntlrStudio.jar\antlr_Studio\license中的ASLicenseManager.class出来Q放Cjasml.jar(参考asm学习(0)--java字节码工具Jasml)同一U目录下?br>  (2).cmdq入控制収ͼcd到jasml.jar目录下,输入以下命o:
  set classpath=%classpath%;jasml.jar;
  java jasml -d ASLicenseManager.class
  (3).打开生成的ASLicenseManager.jasm文gQ找?br>   ----------- 原文 ---------
   invokevirtual   int antlr_Studio.license.LicenseManager.daysLeft()
            istore_1
            iload_1 
            bipush   254
   ----------- 修改为 ----------
            invokevirtual   int antlr_Studio.license.LicenseManager.daysLeft()
            istore_1
            bipush 254
            istore_1
            iload_1 
            bipush   254
  (4).通过jasm文g~译?class文g。在控制C输入命o:
  java jasml -c -o ASLicenseManager.jasm
  重新生成了ASLicenseManager.class文g
  (5).把生成的ASLicenseManager.class文g覆盖在原来eclipse\plugins\AntlrStudio_1.1.0中找到的AntlrStudio.jar文g中的ASLicenseManager.class?br>  (6).新徏一个license.lic文gQ放到plugins\AntlrStudio_1.1.0下,里面的内容ؓQ?
2007-01-01
Signature
=0001
  启动eclipse成功q入?br>  修改好的ASLicenseManager.class.下蝲地址Q?a href="http://www.aygfsteel.com/Files/csnowfox/ASLicenseManager.rar">http://www.aygfsteel.com/Files/csnowfox/ASLicenseManager.rar直接扑ֈ覆盖p?br>  注意Q此文仅供研I参考。提倡用正版?br>

 



csnowfox 2007-06-17 19:50 发表评论
]]>征服javascript(?-Jquery插gjquery.jq.mvc发布 http://www.aygfsteel.com/csnowfox/archive/2007/06/15/124505.htmlcsnowfoxcsnowfoxFri, 15 Jun 2007 07:03:00 GMThttp://www.aygfsteel.com/csnowfox/archive/2007/06/15/124505.htmlhttp://www.aygfsteel.com/csnowfox/comments/124505.htmlhttp://www.aygfsteel.com/csnowfox/archive/2007/06/15/124505.html#Feedback1http://www.aygfsteel.com/csnowfox/comments/commentRss/124505.htmlhttp://www.aygfsteel.com/csnowfox/services/trackbacks/124505.html阅读全文

csnowfox 2007-06-15 15:03 发表评论
]]>
征服javascript(?-Jquery插gjquery.jq.databinding发布http://www.aygfsteel.com/csnowfox/archive/2007/06/15/124490.htmlcsnowfoxcsnowfoxFri, 15 Jun 2007 06:27:00 GMThttp://www.aygfsteel.com/csnowfox/archive/2007/06/15/124490.htmlhttp://www.aygfsteel.com/csnowfox/comments/124490.htmlhttp://www.aygfsteel.com/csnowfox/archive/2007/06/15/124490.html#Feedback0http://www.aygfsteel.com/csnowfox/comments/commentRss/124490.htmlhttp://www.aygfsteel.com/csnowfox/services/trackbacks/124490.html  在前面两文章中Q分别叙qC通过html旧标{来做数据的l定工作的好处与实现Q通过整理Q把l定Ҏ的代码包装成Jquery的plug型式?br>  下蝲地址Q?a href="http://www.aygfsteel.com/Files/csnowfox/jquery.jq.databinding.rar">/Files/csnowfox/jquery.jq.databinding.rar

文gjquery.jq.databinding.js所有源码ؓQ?/p>
/*
 * jQuery databinding plugin
 * Version 1.0  (06/14/2007)
 * @requires jQuery v1.1.1
 *
 * Copyright (c) 2007 JingleQ
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 
*/


/**
 * bind the datas to the dom node talbe which like 
 * <table border="0" cellspacing="5" cellpadding="5" id="ta">
 * <tbody>
 *     <!-- 定制menu是ؓ了标题和下面的列表可以有不一L样式布局 -->
 *     <tr id="menu">
 *         <td>用户?lt;/td>
 *         <td>密码</td>
 *     </tr>
 *     <!-- 用于数据l定 -->
 *     <tr id="def">
 *         <td bindingData="name" bindingPattern="[function] changeName({0})"></td>
 *         <td bindingData="password"></td>
 *     </tr>
 *     <!-- 下面是其它的布局辅助l定数据后依然位于表格底?nbsp;-->
 *     <tr>
 *         <td colspan="2">&nbsp;--- 分页 ---</td>
 *     </tr>
 * </tbody>
 * </table>
 * 
 * 
 * itemCallBackFunction is a callback function
 * using like this
 * 
 * $("#ta").bindingItemsData(dataMap,function(l,it){                    
 *     $(it).hover(function(){
 *         $(it).addClass("blue");
 *     },function(){
 *         $(it).removeClass("blue");
 *     })
 * });
 *
 * @example $("#ta").bindingItemsData(dataMap);
 * @example with callback function $("#ta").bindingItemsData(dataMap,function(l,it) {});
 * @name bindingItemsData
 * @type jQuery
 
*/

jQuery.fn.bindingItemsData 
= function (datas, itemCallBackFunction) {
    
var self = this;    
    
this.find("#def").each(function (i,n) {
        
for (index in datas) {    
            
var newTr = $(n).clone();
            
// --- 标记列表 ---
            newTr.attr("item","true");
            newTr.find(
"td").each(function(k,o){
                
if (o.bindingPattern != undefined || o.bindingPattern == ""{
                    
try {
                        o.bindingPattern 
= o.bindingPattern.replace("[function]","");
                        o.innerHTML 
= eval(o.bindingPattern.replace("\{0\}","'" + datas[index][o.bindingData] + "'"));
                    }
 catch (e) {
                        alert(e);
                    }

                }
 else {
                    o.innerHTML 
= datas[index][o.bindingData];
                }

            }
)
            self.find(
"#def").after(newTr);
        }

    }
)
    
    
// --- 通过回调d列表样式 ---
    if (itemCallBackFunction != undefined) {
        $(
"#ta").find("tr[@item]").each(function(l,it) {
                itemCallBackFunction(l,it)
            }

        );
    }

    
return ta;
}


/**
 * bind the data to the dom node which like 
 * <span id="dt" 
 *             bindingData="name" 
 *             bindingPattern="[function] changeName({0})">
 * </span>
 *
 * @example $("span").bindingSpanData(dataMap);
 * @name bindingSpanData
 * @type jQuery
 
*/

jQuery.fn.bindingSpanData 
= function(data){
    
return this.each(function (i,n) {
        
if (n.bindingPattern != undefined || n.bindingPattern == ""{
            
try {
                n.bindingPattern 
= n.bindingPattern.replace("[function]","");
                n.innerHTML 
= eval(n.bindingPattern.replace("\{0\}","'" + data[n.bindingData] + "'"));
            }
 catch (e) {
                alert(e);
            }

        }
 else {
            n.innerHTML 
= data[n.bindingData];
        }

    }
)
}


csnowfox 2007-06-15 14:27 发表评论
]]>
征服javascript(?-旧标{新属?列表展示)http://www.aygfsteel.com/csnowfox/archive/2007/06/13/123840.htmlcsnowfoxcsnowfoxWed, 13 Jun 2007 05:03:00 GMThttp://www.aygfsteel.com/csnowfox/archive/2007/06/13/123840.htmlhttp://www.aygfsteel.com/csnowfox/comments/123840.htmlhttp://www.aygfsteel.com/csnowfox/archive/2007/06/13/123840.html#Feedback0http://www.aygfsteel.com/csnowfox/comments/commentRss/123840.htmlhttp://www.aygfsteel.com/csnowfox/services/trackbacks/123840.html阅读全文

csnowfox 2007-06-13 13:03 发表评论
]]>
征服javascript(?-旧标{新属?面数据分离与数据{化处?http://www.aygfsteel.com/csnowfox/archive/2007/06/13/123749.htmlcsnowfoxcsnowfoxWed, 13 Jun 2007 00:17:00 GMThttp://www.aygfsteel.com/csnowfox/archive/2007/06/13/123749.htmlhttp://www.aygfsteel.com/csnowfox/comments/123749.htmlhttp://www.aygfsteel.com/csnowfox/archive/2007/06/13/123749.html#Feedback0http://www.aygfsteel.com/csnowfox/comments/commentRss/123749.htmlhttp://www.aygfsteel.com/csnowfox/services/trackbacks/123749.html   今天才发现原来html的基本标{N面的属性是可以由我们自己随意添加的Q而且通过DOM方式q能够访问到。这一功能可以做很多事情?br>  q里我做的就是数据分,q是用好ajax的前提条件。实CQ通过在span标签中添加上bindingData属性和bindingPattern属性来指明数据和数据{化逻辑。通过javascript处理填入数据内容?br>  当然要处理javascript代码Q用了jqueryQjquery在操作DOM对象的时候带来很大的便利。另外jquery在ajax与数据展C特效中都有的表现。后面会再有详细说明?br>  整个E序如下Q?br>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//ZH-CN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
   
<title>HelloWorld</title>
   
<script src="lib/jquery/jquery.js" type="text/javascript" charset="utf-8"></script>
   
<script type="text/javascript" charset="utf-8">
  
   
// --- 基本数据?nbsp;---
   var dataMap = {"name":"0001","password":"123456"};
   
var userMap = {"0001":"jingle","0002":"chen"}
   
// --- end ---  

   
// --- 基本数据格式转换逻辑?nbsp;--- 
   function changeName(val) {
    
return userMap[val];
   }

   
// --- end ---
  
   
// --- 数据l定 ---
   $(document).ready(function (){
    $(
"span").each(function (i,n) {
     
if (n.bindingPattern != undefined || n.bindingPattern == ""{
      
try {
       n.bindingPattern 
= n.bindingPattern.replace("[function]","");
       
// --- 调用处理Ҏ ---
       //当然可以在这里加强,不止只有一个参?/span>
       n.innerHTML = eval(n.bindingPattern.replace("\{0\}","'" + dataMap[n.bindingData] + "'"));
      }
 catch (e) {
       alert(e);
      }

     }
 else {
      n.innerHTML 
= dataMap[n.bindingData];
     }

    }
)
   }
)
   
// --- end ---

   
</script>
</head>
<body>
   
<div id="head">HelloWOrld</div>
   
<hr/>
   
<div id="conent"> 
    
<!-- q样写在html区域代码清晰明了 -->
    
<table border="0" cellspacing="5" cellpadding="5">
     
<tr>
          
<td><span bindingData="name" bindingPattern="[function] changeName({0})"></span></td>
     
</tr>
     
<tr>
          
<td><span bindingData="password"></span></td>
     
</tr>
    
</table>
   
</div>
</body>
</html>

 

 

 



csnowfox 2007-06-13 08:17 发表评论
]]>
征服javascript(?-重复的东西我来做Snippets(?http://www.aygfsteel.com/csnowfox/archive/2007/06/12/123639.htmlcsnowfoxcsnowfoxTue, 12 Jun 2007 08:26:00 GMThttp://www.aygfsteel.com/csnowfox/archive/2007/06/12/123639.htmlhttp://www.aygfsteel.com/csnowfox/comments/123639.htmlhttp://www.aygfsteel.com/csnowfox/archive/2007/06/12/123639.html#Feedback0http://www.aygfsteel.com/csnowfox/comments/commentRss/123639.htmlhttp://www.aygfsteel.com/csnowfox/services/trackbacks/123639.html  q一步深入Snippets?br>  在Script头里面有一个DOM属性,他确实是库的引入功能。如DOM:http://download.eclipse.org/technology/dash/update/org.eclipse.eclipsemonkey.lang.javascript是引入了在plug-in中org.eclipse.eclipsemonkey.lang.javascript_0.1.10.15171.jar中所包函的类库,他是DOM的一个扩展,所以带l了我们了一些内|的变量来提高我们的开发效率,?resources,views,io,editors。在Eclipse Monkey Example中,q些内置变量出现的用法ؓ
  resources//资源对象
  var files = resources.filesMatching(".*\\.java"); \\扑ֈ所?java文g
  views//视图对象
  var webView = views.getView("GooleWebView"); \\生成一个视?br>  editors//~辑器对?br>  var editor = editores.activeEditor;\\得到一个活动的~辑?br>  具体q些变量q有什么属性和ҎQ我参考了在org.eclipse.eclipsemonkey.lang.javascript_0.1.10.15171中的原代码,如resourcesc,扑ֈorg.eclipse.eclipsemonkey.lang.javascript_0.1.10.15171\src\org\eclipse\eclipsemonkey\lang\javascript\doms\resources下的Resources.java,可以发现c里面就对应有一个filesMatchingҎQ而对于editores,在其构造函C扑ֈ如下代码Q?br>   String[] names = new String[] {
     //"open",
     "toString"
     };

   this.defineFunctionProperties(names, Editors.class, PERMANENT | READONLY);

   this.defineProperty("all", Editors.class, PERMANENT | READONLY);
   this.defineProperty("activeEditor", Editors.class, PERMANENT | READONLY);
q就告诉我们q个变量里面Q我们可以用all,activeEditor属性和toStringҎ?br>  另外在plugins\com.aptana.ide.scripting_0.2.8.15171\docs中,提供了部分的js的接口,里面有描q部份变量和对象的用,如Editors.jsQFile.jsQGlobal.js{?/p>

  在上一节中Q我提到了一个问题就是在我编写的打开E序所在的文gҎ候,只能打开aptana方式打开的视囄文gQ通过q查源码Q我发现Qaptana中提供的editor有css,html,js,php,xmlq些~辑器类中都有提供了一个getFileContext()ҎQ而这是eclipse原来的视图所不一定具有的Q所以提C错误ؓ找不到getFileContext()Ҏ?/p>

  Snippets是一个辅助工P灉|单,特别是在文本处理上能提供很好的帮助。但是他的功能还是受到局限,开发复杂的操作q是选用eclipse的plug-in功能为好。其待Snippets有很好的发展?/p>

csnowfox 2007-06-12 16:26 发表评论
]]>
征服javascript(?-重复的东西我来做Snippets(?? http://www.aygfsteel.com/csnowfox/archive/2007/06/12/123637.htmlcsnowfoxcsnowfoxTue, 12 Jun 2007 08:24:00 GMThttp://www.aygfsteel.com/csnowfox/archive/2007/06/12/123637.htmlhttp://www.aygfsteel.com/csnowfox/comments/123637.htmlhttp://www.aygfsteel.com/csnowfox/archive/2007/06/12/123637.html#Feedback0http://www.aygfsteel.com/csnowfox/comments/commentRss/123637.htmlhttp://www.aygfsteel.com/csnowfox/services/trackbacks/123637.html  沿着aptana的脚步,我遇CSnippetsQ开始我q以为是aptana所Ҏ的东西,原来Snippets来自Monkey-Eclipse Monkey?br>  什么是Monkey呢?
  官方|址?a >http://www.eclipse.org/dash/
  Monkey是一个用于自动完成繁琐的~程d的动枋态脚本工兗他使用javascript的语法,有其自带的开发库又可以用某些java的函数。因为它的简单性,我认为它是区别于plugs-in的另外一U对eclipse的扩展的好工兗?br>  来,看看Eclipse Monkey Example带给了我们什么应用?br>  属于Editors的命令有QCommont Lines,Leading Spaces to Tabs,Leading Tabs to Spaces?br>  属于Experimental的命令有QColorize as HTML,Exercise Editor,Load Metadata,Show Lexemes,Show Parse Tree.
  ......
  不一一列D了?br>  学习的资料是,我看了看代码Q理解出了用法。仿照着写了两个Snippets,分别完成两个单独的功能。注意,由我自己的经验是需?.2以上版本才对aptana与monkey有很好的支持。如果先装了aptana之后再装monkey的话Q如monkey的文档所说到的monkey example很难加蝲到菜单上Q需要手动修攚w|,具体Ҏq没定Q如果先装了monkeyQ就可以先新建出monkey example再装aptanaQ这h们开发Snippetsq单多了,直接生成了个workplace中的目Q写完Snippets保存Q马上就能通过Snippets视图中双d载上的Snippets来运行。就建出的项目的Snippets也能马上保存到Snippets视图中?br>  一.l某行代码加?//"的注释符Pq样cM于eclipse中的Ctrl+?键的功能Q但单实现当以经?//"注释的时候依然加?//"Q文件所处的位置对Snippets没媄响?br>
/*
* Menu: Editor > lines
* Kudos: Kevin Lindsey
* License: EPL 1.0
* DOM: http://download.eclipse.org/technology/dash/update/org.eclipse.eclipsemonkey.lang.javascript
* DOM: http://localhost/com.aptana.ide.scripting
*/

//文g头必这样定义好Q在开_q有其它可定义的属性,Menu是加蝲到eclipse中的执行命o的位|?br>//DOM应该是类gcd的一样东西,选择需要加?br>/**
* main
*/
//main是执行的Ҏ的入?/p>

function main()
{
var editor = editors.activeEditor;
var range = editor.selectionRange;
var startLine = editor.getLineAtOffset(range.startingOffset);
editor.beginCompoundChange();
var offset = editor.getOffsetAtLine(startLine)
editor.applyEdit(offset,0,"http://");
editor.endCompoundChange();

}

  ?q是一个很有用的功能,打开所~辑文g的所在文件夹Qƈ对该文g选定。不知道Z?editors.activeEditor.textEditor.getFileContext()只对aptana方式打开的文件有效?br>
/*
* Menu: File > OpenDir
* Kudos: Kevin Lindsey
* License: EPL 1.0
* DOM: http://download.eclipse.org/technology/dash/update/org.eclipse.eclipsemonkey.lang.javascript
* DOM: http://localhost/com.aptana.ide.scripting
*/
/**
* main
*/

function main()
{
try {
       //获取文g路径
       var filename = editors.activeEditor.textEditor.getFileContext().getSourceProvider().getSourceURI();
       filename = filename.replace("%20"," ");
       //调用pȝ命o
       java.lang.Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL Explorer.exe /select," + filename);
} catch(e) {
       Packages.org.eclipse.jface.dialogs.MessageDialog.openInformation(  
        window.getShell(),  
        "Monkey Dialog",
        e
       )
}
}



csnowfox 2007-06-12 16:24 发表评论
]]>
征服javascript(一)-成熟的烙印aptanahttp://www.aygfsteel.com/csnowfox/archive/2007/06/12/123506.htmlcsnowfoxcsnowfoxTue, 12 Jun 2007 00:14:00 GMThttp://www.aygfsteel.com/csnowfox/archive/2007/06/12/123506.htmlhttp://www.aygfsteel.com/csnowfox/comments/123506.htmlhttp://www.aygfsteel.com/csnowfox/archive/2007/06/12/123506.html#Feedback0http://www.aygfsteel.com/csnowfox/comments/commentRss/123506.htmlhttp://www.aygfsteel.com/csnowfox/services/trackbacks/123506.html  语言的流行,必然M开便捷的开发工兗?br>  aptana是一个基于eclipse的强大开源js开发工兗?br>  由官方的陈述Q它的特点包括:
  1.JavaScript,JavaScript 函数,Html,CSS语言的code Assist功能?br>  2.Outliner(大纲):昄JavaScript,Html和CSS的代码结构?br>  3.代码语法错误提示?br>  4.支持跨^台?br>  5.支持行Ajax框架的Code Assist功能:Aflax,Dojo,Jquery,MochiKit,Prototype,Rico,script.aculo.us{?br>  另外我自q体验是aptana提供了一个Snippets的概는于生成格式代码,在aptana中还提供着多种支持ajax框架的帮助文档视?/p>

[Code Assist截图]

[代码语法错误提示截图]



csnowfox 2007-06-12 08:14 发表评论
]]>
征服javascript(前言)-Z么jshttp://www.aygfsteel.com/csnowfox/archive/2007/06/12/123505.htmlcsnowfoxcsnowfoxTue, 12 Jun 2007 00:13:00 GMThttp://www.aygfsteel.com/csnowfox/archive/2007/06/12/123505.htmlhttp://www.aygfsteel.com/csnowfox/comments/123505.htmlhttp://www.aygfsteel.com/csnowfox/archive/2007/06/12/123505.html#Feedback0http://www.aygfsteel.com/csnowfox/comments/commentRss/123505.htmlhttp://www.aygfsteel.com/csnowfox/services/trackbacks/123505.html  企业应用也开始用v复杂的js来进行与用户和服务器两方面的交互,jsq不只是一U展C是一U通迅方式Q读懂javascript很必?
  ajaxq不秘(之前以经有一文章说明了其最core的部?Qjavascriptq不复杂Q学好javascriptQ由今天做v!之后是javascript的相兛_?

csnowfox 2007-06-12 08:13 发表评论
]]>
wsad环境中jax-rpc应用http://www.aygfsteel.com/csnowfox/articles/122960.htmlcsnowfoxcsnowfoxFri, 08 Jun 2007 17:07:00 GMThttp://www.aygfsteel.com/csnowfox/articles/122960.htmlhttp://www.aygfsteel.com/csnowfox/comments/122960.htmlhttp://www.aygfsteel.com/csnowfox/articles/122960.html#Feedback0http://www.aygfsteel.com/csnowfox/comments/commentRss/122960.htmlhttp://www.aygfsteel.com/csnowfox/services/trackbacks/122960.html  善假于物者强Q?br>  J2EE(TM)1.4q_提供了一套web services的apiQJAX-RPC API?br>  使用它就引入了几个xml的配|文件webservices.xml,*.wsdl,*_mapping.xml。这W一ơ让我意识到Web目的入口不止有web.xml文g。如果应用jax-rpcҎQweb services的入口就是webservices.xml。这点不同于使用xfire和axiq些web services的实现?br>  如果真要自己来写q一堆的文gQ那些规则够你学的。前面提到善假于物者强!使用开发工h完成q些文g的自动生成,l我们的web services提供了很大的便利。我使用的是wsad5.1,只要完成了想发布的web servicesc,通过右键菜单中的Web服务->生成wsdl文g便能完成其它的工作,跟着向导走完后便能v动服务器看到效果了。在该Web服务菜单中还包括了启动测试机和生成样本应用程序的功能Q这栯行开发太手了。渐渐感觉wsad除了不能随你便改jdk外还是不错的。同样eclipse也应该提供了cM的web services生成的工兗?/p>

csnowfox 2007-06-09 01:07 发表评论
]]>
企业应用Q忽悠h?http://www.aygfsteel.com/csnowfox/articles/122749.htmlcsnowfoxcsnowfoxThu, 07 Jun 2007 16:13:00 GMThttp://www.aygfsteel.com/csnowfox/articles/122749.htmlhttp://www.aygfsteel.com/csnowfox/comments/122749.htmlhttp://www.aygfsteel.com/csnowfox/articles/122749.html#Feedback0http://www.aygfsteel.com/csnowfox/comments/commentRss/122749.htmlhttp://www.aygfsteel.com/csnowfox/services/trackbacks/122749.html  没见q世面的我从来觉得企业应用都是忽悠h的东?今天仲于有机会见C大公司的应用`` 只窥一斑,叹ؓ观止!l于肯定了我先到大公司练手的x不错!
  在这个我参与的项目中Q我看到了企业应用的如下Ҏ与实施ҎQ?br>  一Q支持热部v性,通过划分目分子模块来实现。这个体pȝ的让我大开眼界?br>  二,高度配置性,q依赖了大量的xmlQ公用部分高度抽象,貌似逻辑都用了xml配出来,也可能这是引入xml作ؓ传输数据的好处。呵呵,感觉真的从xml的数量就可以看到一个应用的企业化程度,但是不知是否由xml带来了过多的自定义规?
  三,层次清晰性,层与层之间接口有良好的定义,可很好的分工。这个体验也是比较新的,web serviceQrpcQtcp/ip{等Q这些子模块之间交互的手D很必要。也通过q样的交互解决不同^C同语a的差异。小|站和大应用的区别就是分布适了。象ibm所鼓吹的企业应用技术在网站上完全体现不到优势而成为篏赘。ps:分层的另外一个好处就是可以让我们有更多事qԌ在定义接口的时候就忙来忙去花时间等下班。o yeahQ?br>  四,对象资源性,当对象达C定规模就需要把对象用资源的角度ȝ。这意味着l一?br>  五,也是很重要的一个就是接口的使用Q接口就是企业应用的生命?br>  很多东西可以学习Q努力研I代码中``



csnowfox 2007-06-08 00:13 发表评论
]]>
[导入]flash球q动制作http://www.aygfsteel.com/csnowfox/archive/2007/06/06/122385.htmlcsnowfoxcsnowfoxWed, 06 Jun 2007 08:00:00 GMThttp://www.aygfsteel.com/csnowfox/archive/2007/06/06/122385.htmlhttp://www.aygfsteel.com/csnowfox/comments/122385.htmlhttp://www.aygfsteel.com/csnowfox/archive/2007/06/06/122385.html#Feedback0http://www.aygfsteel.com/csnowfox/comments/commentRss/122385.htmlhttp://www.aygfsteel.com/csnowfox/services/trackbacks/122385.html   哎,现在都成了大徒弟的flash作业枪手了。flashQ真的是一个又高深又简单的东西。对于flash的编E,很多大牛都望而止步?br>    以前偶尔也写写flashQ到真的又要写的时候确实也无从下手Q在|上搜了又搜才有头A开始下手?br>    q次实现的功能如下:一个小球从自由落体C地面接触又弹hQ在d上有两个按钮控制球的静止与q动?br>    前提q动理论Q可能我记错了也不一定,在制作过E中使用C以下规律Q一Q运动公?s=vt+1/2*g*t^2Q二Qv=gtQ三Q小球运动过E中

阅读全文
cdQ?/b>多媒体制?/a> 查看评论
文章来源:http://hi.baidu.com/jingleq/blog/item/05ac85ef6d95aa37acafd5fb.html

csnowfox 2007-06-06 16:00 发表评论
]]>
[导入]java正则表达式效?/title><link>http://www.aygfsteel.com/csnowfox/archive/2007/06/04/122044.html</link><dc:creator>csnowfox</dc:creator><author>csnowfox</author><pubDate>Mon, 04 Jun 2007 04:42:00 GMT</pubDate><guid>http://www.aygfsteel.com/csnowfox/archive/2007/06/04/122044.html</guid><wfw:comment>http://www.aygfsteel.com/csnowfox/comments/122044.html</wfw:comment><comments>http://www.aygfsteel.com/csnowfox/archive/2007/06/04/122044.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/csnowfox/comments/commentRss/122044.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/csnowfox/services/trackbacks/122044.html</trackback:ping><description><![CDATA[ <div id="wmqeeuq" class="sysBr500 text" align="left"> <div>  对于正则表达式的使用效率问题Q我在网上看到的有两U截然不同的l果Q到底它的效率如何,今天我用java来做了个则试?/div> <div> <div>  解决的问题很单,从一个字W串中把用正则表辑ּ?font face="宋体">href="[^\"]*"的字W串保存C个list中去。先构造一个长字符Ԍ再进行匹配操作?/font></div> <div>试代码如下Q?/div> <div> <p><font face="宋体">import java.util.LinkedList;<br> import java.util.List;<br> import java.util.</font></p></div></div></div> <br/><b>cdQ?/b><a >技术档?/a> <a >查看评论</a><br>文章来源:<a >http://hi.baidu.com/jingleq/blog/item/7bc39b62b61839dce7113a54.html</a><img src ="http://www.aygfsteel.com/csnowfox/aggbug/122044.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/csnowfox/" target="_blank">csnowfox</a> 2007-06-04 12:42 <a href="http://www.aygfsteel.com/csnowfox/archive/2007/06/04/122044.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]asm学习(4)--Tree APIhttp://www.aygfsteel.com/csnowfox/archive/2007/05/31/122045.htmlcsnowfoxcsnowfoxThu, 31 May 2007 06:09:00 GMThttp://www.aygfsteel.com/csnowfox/archive/2007/05/31/122045.htmlhttp://www.aygfsteel.com/csnowfox/comments/122045.htmlhttp://www.aygfsteel.com/csnowfox/archive/2007/05/31/122045.html#Feedback0http://www.aygfsteel.com/csnowfox/comments/commentRss/122045.htmlhttp://www.aygfsteel.com/csnowfox/services/trackbacks/122045.html

     asm文档阅读已快到尾壎ͼ最后一章已到Tree API的用,Tree API是针对Class,Method,Field{其它同U的属性进行了一个类包装Q可以让我们用面向对像的形式来操作字节码Q但也不要负于太高的期望Q要操作字节码还真得弄懂了才能下手,Tree API带给我们的只是代码量的减。Tree API是通过实现ClassVisitor接口而实现的Q从另外一个角度来说就是给我们又封装了一层ClassVisitor,让我们开发便利点?br>
  


cdQ?/b>技术档?/a> 查看评论
文章来源:http://hi.baidu.com/jingleq/blog/item/b134abddd23c4cee76c63854.html

csnowfox 2007-05-31 14:09 发表评论
]]>
[导入]asm学习(3)--visitor模式http://www.aygfsteel.com/csnowfox/archive/2007/05/31/122046.htmlcsnowfoxcsnowfoxThu, 31 May 2007 00:44:00 GMThttp://www.aygfsteel.com/csnowfox/archive/2007/05/31/122046.htmlhttp://www.aygfsteel.com/csnowfox/comments/122046.htmlhttp://www.aygfsteel.com/csnowfox/archive/2007/05/31/122046.html#Feedback0http://www.aygfsteel.com/csnowfox/comments/commentRss/122046.htmlhttp://www.aygfsteel.com/csnowfox/services/trackbacks/122046.html
         Visitor讉K者模式作用于某个对象的操作,它可以你在不改变这些对象本w的情况下,定义作用于这些对象的新操作?/div>
  在asm中,ClassReader对象可以接受一个实现ClassVisitor接口的对象来q行对读入的Class的访问与控制?/div>
  其中Q如asm文档展示了一个很单的ClassPrinterc,用来打印cȝ关信息?/font>
ClassPrinter cp = new Clas

cdQ?/b>技术档?/a> 查看评论
文章来源:http://hi.baidu.com/jingleq/blog/item/d1dca911a6c2aac7a7ef3f54.html

csnowfox 2007-05-31 08:44 发表评论
]]> վ֩ģ壺 | | ͸| | | | û| | ۲| | | ˮ| | ̩| | | ɽ| º| ͬ| Ϫ| | | Ϸ| Ž| п| Ϫ| | | ϰ| ƺ| | Դ| | ɽ| Զ| | °| | ½| | ³ľ|