posts - 48, comments - 13, trackbacks - 0, articles - 0
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          &:&
          ": "
          <url address="http://data.ent.sina.com.cn/star/starlist.php?&amp;initial=A&amp;tpl=0&amp;dpc=1"></url>
          <img tagText="p class=&quot;bigphoto&quot;" toExcelName="照片"></img>

          posted @ 2009-09-18 13:40 董銳 閱讀(148) | 評(píng)論 (0)編輯 收藏

          javascript從assiic轉(zhuǎn)字符:
          for(var i=65;i<91;i++)
             document.write("<a href='starlist.php?"+newsearch+"&initial="+String.fromCharCode(i)+"&tpl=0&dpc=1' target='_self'>"+String.fromCharCode(i)+"</a> ");

          posted @ 2009-09-15 10:05 董銳 閱讀(232) | 評(píng)論 (0)編輯 收藏

          DOM 是用與平臺(tái)和語(yǔ)言無(wú)關(guān)的方式表示 XML 文檔的官方 W3C 標(biāo)準(zhǔn)。DOM 是以層次結(jié)構(gòu)組織的節(jié)點(diǎn)或信息片斷的集合。這個(gè)層次結(jié)構(gòu)允許開(kāi)發(fā)人員在樹(shù)中尋找特定信息。分析該結(jié)構(gòu)通常需要加載整個(gè)文檔和構(gòu)造層次結(jié)構(gòu),然后才能做任何工作。由于它是基于信息層次的,因而 DOM 被認(rèn)為是基于樹(shù)或基于對(duì)象的。DOM 以及廣義的基于樹(shù)的處理具有幾個(gè)優(yōu)點(diǎn)。首先,由于樹(shù)在內(nèi)存中是持久的,因此可以修改它以便應(yīng)用程序能對(duì)數(shù)據(jù)和結(jié)構(gòu)作出更改。它還可以在任何時(shí)候在樹(shù)中上下導(dǎo)航,而不是像 SAX 那樣是一次性的處理。DOM 使用起來(lái)也要簡(jiǎn)單得多。

            另一方面,對(duì)于特別大的文檔,解析和加載整個(gè)文檔可能很慢且很耗資源,因此使用其他手段來(lái)處理這樣的數(shù)據(jù)會(huì)更好。這些基于事件的模型,比如 SAX。
           
          這種處理的優(yōu)點(diǎn)非常類(lèi)似于流媒體的優(yōu)點(diǎn)。分析能夠立即開(kāi)始,而不是等待所有的數(shù)據(jù)被處理。而且,由于應(yīng)用程序只是在讀取數(shù)據(jù)時(shí)檢查數(shù)據(jù),因此不需要將數(shù)據(jù)存儲(chǔ)在內(nèi)存中。這對(duì)于大型文檔來(lái)說(shuō)是個(gè)巨大的優(yōu)點(diǎn)。事實(shí)上,應(yīng)用程序甚至不必解析整個(gè)文檔;它可以在某個(gè)條件得到滿足時(shí)停止解析。一般來(lái)說(shuō),SAX 還比它的替代者 DOM 快許多。


          JDOM 的目的是成為 Java 特定文檔模型,它簡(jiǎn)化與 XML 的交互并且比使用 DOM 實(shí)現(xiàn)更快。由于是第一個(gè) Java 特定模型,JDOM 一直得到大力推廣和促進(jìn)。正在考慮通過(guò)“Java 規(guī)范請(qǐng)求 JSR-102”將它最終用作“Java 標(biāo)準(zhǔn)擴(kuò)展”。從 2000 年初就已經(jīng)開(kāi)始了 JDOM 開(kāi)發(fā)。

            JDOM 與 DOM 主要有兩方面不同。首先,JDOM 僅使用具體類(lèi)而不使用接口。這在某些方面簡(jiǎn)化了 API,但是也限制了靈活性。第二,API 大量使用了 Collections 類(lèi),簡(jiǎn)化了那些已經(jīng)熟悉這些類(lèi)的 Java 開(kāi)發(fā)者的使用。

            JDOM 文檔聲明其目的是“使用 20%(或更少)的精力解決 80%(或更多)Java/XML 問(wèn)題”(根據(jù)學(xué)習(xí)曲線假定為 20%)。JDOM 對(duì)于大多數(shù) Java/XML 應(yīng)用程序來(lái)說(shuō)當(dāng)然是有用的,并且大多數(shù)開(kāi)發(fā)者發(fā)現(xiàn) API 比 DOM 容易理解得多。JDOM 還包括對(duì)程序行為的相當(dāng)廣泛檢查以防止用戶(hù)做任何在 XML 中無(wú)意義的事。然而,它仍需要您充分理解 XML 以便做一些超出基本的工作(或者甚至理解某些情況下的錯(cuò)誤)。這也許是比學(xué)習(xí) DOM 或 JDOM 接口都更有意義的工作。

            JDOM 自身不包含解析器。它通常使用 SAX2 解析器來(lái)解析和驗(yàn)證輸入 XML 文檔(盡管它還可以將以前構(gòu)造的 DOM 表示作為輸入)。它包含一些轉(zhuǎn)換器以將 JDOM 表示輸出成 SAX2 事件流、DOM 模型或 XML 文本文檔。JDOM 是在 Apache 許可證變體下發(fā)布的開(kāi)放源碼。 
                 http://www.jdom.org/


          最后是 DOM4J http://dom4j.sourceforge.net/

            雖然 DOM4J 代表了完全獨(dú)立的開(kāi)發(fā)結(jié)果,但最初,它是 JDOM 的一種智能分支。它合并了許多超出基本 XML 文檔表示的功能,包括集成的 XPath 支持、XML Schema 支持以及用于大文檔或流化文檔的基于事件的處理。它還提供了構(gòu)建文檔表示的選項(xiàng),它通過(guò) DOM4J API 和標(biāo)準(zhǔn) DOM 接口具有并行訪問(wèn)功能。從 2000 下半年開(kāi)始,它就一直處于開(kāi)發(fā)之中。

            為支持所有這些功能,DOM4J 使用接口和抽象基本類(lèi)方法。DOM4J 大量使用了 API 中的 Collections 類(lèi),但是在許多情況下,它還提供一些替代方法以允許更好的性能或更直接的編碼方法。直接好處是,雖然 DOM4J 付出了更復(fù)雜的 API 的代價(jià),但是它提供了比 JDOM 大得多的靈活性。

            在添加靈活性、XPath 集成和對(duì)大文檔處理的目標(biāo)時(shí),DOM4J 的目標(biāo)與 JDOM 是一樣的:針對(duì) Java 開(kāi)發(fā)者的易用性和直觀操作。它還致力于成為比 JDOM 更完整的解決方案,實(shí)現(xiàn)在本質(zhì)上處理所有 Java/XML 問(wèn)題的目標(biāo)。在完成該目標(biāo)時(shí),它比 JDOM 更少?gòu)?qiáng)調(diào)防止不正確的應(yīng)用程序行為。

            DOM4J 是一個(gè)非常非常優(yōu)秀的Java XML API,具有性能優(yōu)異、功能強(qiáng)大和極端易用使用的特點(diǎn),同時(shí)它也是一個(gè)開(kāi)放源代碼的軟件。如今你可以看到越來(lái)越多的 Java 軟件都在使用 DOM4J 來(lái)讀寫(xiě) XML,特別值得一提的是連 Sun 的 JAXM 也在用 DOM4J。

          package com.test;

            import java.io.*;
            import java.util.*;
            import org.dom4j.*;
            import org.dom4j.io.*;

            public class MyXMLReader {

            public static void main(String arge[]) {
            long lasting = System.currentTimeMillis();
            try {
             File f = new File("data_10k.xml");
             SAXReader reader = new SAXReader();
             Document doc = reader.read(f);
             Element root = doc.getRootElement();
             Element foo;
             for (Iterator i = root.elementIterator("VALUE"); i.hasNext();) {
              foo = (Element) i.next();
              System.out.print("車(chē)牌號(hào)碼:" + foo.elementText("NO"));
              System.out.println(" 車(chē)主地址:" + foo.elementText("ADDR"));
             }
            } catch (Exception e) {
             e.printStackTrace();
            }
            System.out.println("運(yùn)行時(shí)間:" + (System.currentTimeMillis() - lasting) + " 毫秒");
            }
            }

          posted @ 2009-09-08 13:38 董銳 閱讀(303) | 評(píng)論 (0)編輯 收藏

          配置tomcat的CATALINA_PATH,記得路徑后面不要帶上'\'或‘;’

          posted @ 2009-08-08 22:13 董銳 閱讀(159) | 評(píng)論 (0)編輯 收藏

              

          剛開(kāi)始我將log4j.properties文件放在WEB-INF/目錄下,怎么都不能產(chǎn)生日志到文件中,后來(lái)才發(fā)現(xiàn),原來(lái)要放到WEB-INF/classes目錄下才行。奇怪tapestry5為什么一定要這樣安排,不知有沒(méi)有什么地方是可以配置這個(gè)文件路徑的。

          posted @ 2009-04-28 06:26 董銳 閱讀(220) | 評(píng)論 (0)編輯 收藏

              
           <target name="build" description="Compile main source tree java files into class files, generate jar files">
             <javac destdir="${build.dir}"  listfiles="true"
              debug="true" deprecation="false" optimize="false" failonerror="true">
              <src path="${src.dir}"/>
              <classpath refid="master-classpath"/>
             </javac>
           </target>

          最近一個(gè)新項(xiàng)目運(yùn)行這個(gè)target總是有問(wèn)題,在目標(biāo)路徑?jīng)]有類(lèi)文件產(chǎn)生。后來(lái)發(fā)現(xiàn)每次要將該工程的bulidpath做點(diǎn)小變化,如remove哪個(gè)路勁再添加回去,讓工程重新bulid一下,在運(yùn)行這個(gè)target就可以在目標(biāo)路徑產(chǎn)生類(lèi)文件了,好奇怪,不知為什么,之前幾個(gè)項(xiàng)目都是直接運(yùn)行target就行了的。注:我用的是Eclipse開(kāi)發(fā)工具。

          posted @ 2009-04-28 06:20 董銳 閱讀(925) | 評(píng)論 (2)編輯 收藏

          在tapestry5的頁(yè)面中,添加如下代碼
          @Inject
                  @Service("ApplicationGlobals")
                  private ApplicationGlobals applicationGlobals;

                  @SetupRender
                  void setListener(){
                          Clock.setListener(this);
                  }

          public void setClockDisplay(final String output) {

          Browser.withPage(ServerContextFactory.get(applicationGlobals.getServletContext()),"/manageCar/Dwrtracker", new Runnable() {
                      public void run() {
                         // Util.setValue("clockDisplay", output);
                      System.out.println("updateClockValue");
                          ScriptSessions.addFunctionCall("updateClockValue", output);
                 
                      }
                  });
          }
          interface IClockListener {
           public void setClockDisplay(final String output);
          }

          posted @ 2009-03-23 14:40 董銳 閱讀(291) | 評(píng)論 (0)編輯 收藏

           FROM :
          http://wiki.apache.org/tapestry/Tapestry5HowtoSelectWithObjects


          import java.util.ArrayList;
          import java.util.Collection;
          import java.util.List;
          import org.apache.tapestry.OptionGroupModel;
          import org.apache.tapestry.OptionModel;
          import org.apache.tapestry.ValueEncoder;
          import org.apache.tapestry.internal.OptionModelImpl;
          import org.apache.tapestry5.internal.OptionGroupModelImpl;
          import org.apache.tapestry.ioc.services.PropertyAccess;
          import org.apache.tapestry.ioc.services.PropertyAdapter;
          import org.apache.tapestry.util.AbstractSelectModel;
          /** Generic selection model for a list of Objects.
          * use:
          * <pre>@Inject private PropertyAccess _access;</pre>
          * in your page to ge the {@link PropertyAccess} service.<br>
          * !Notice: you must set the created instance both as model and encoder parameter for the {@link Select} component.*/
          public class GenericSelectModel<T> extends AbstractSelectModel implements ValueEncoder<T> {
          private PropertyAdapter labelFieldAdapter;
          private PropertyAdapter idFieldAdapter;
          private Collection<T>         list;
          public GenericSelectModel(Collection<T> list, Class<T> clazz, String labelField, String idField, PropertyAccess access) {
          this.list = list;
          if (idField != null)
          this.idFieldAdapter = access.getAdapter(clazz).getPropertyAdapter(idField);
          if (labelField != null)
          this.labelFieldAdapter = access.getAdapter(clazz).getPropertyAdapter(labelField);
          }
          public void addOptionGroup(String label, boolean disabled, List<T> options) {
          List<OptionModel> optionModels = new ArrayList<OptionModel>();
          if (labelFieldAdapter == null) {
          for (T obj : options) {
          optionModels.add(new OptionModelImpl(nvl(obj), obj));
          }
          } else {
          for (T obj : options) {
          optionModels.add(new OptionModelImpl(nvl(labelFieldAdapter.get(obj)), obj));
          }
          }
          if (optionGroups == null) {
          optionGroups = new ArrayList<OptionGroupModel>();
          }
          optionGroups.add(new OptionGroupModelImpl(label, disabled, optionModels, new String[0]));
          }
          public List<OptionGroupModel> getOptionGroups() {
          return null;
          }
          public List<OptionModel> getOptions() {
          List<OptionModel> optionModelList = new ArrayList<OptionModel>();
          if (labelFieldAdapter == null) {
          for (T obj : list) {
          optionModelList.add(new OptionModelImpl(nvl(obj)));
          }
          } else {
          for (T obj : list) {
          optionModelList.add(new OptionModelImpl(nvl(labelFieldAdapter.get(obj)), obj));
          }
          }
          return optionModelList;
          }
          // ValueEncoder functions
          public String toClient(T obj) {
          if (idFieldAdapter == null) {
          return obj + "";
          } else {
          return idFieldAdapter.get(obj) + "";
          }
          }
          public T toValue(String string) {
          if (idFieldAdapter == null) {
          for (T obj : list) {
          if (nvl(obj).equals(string)) return obj;
          }
          } else {
          for (T obj : list) {
          if (nvl(idFieldAdapter.get(obj)).equals(string)) return obj;
          }
          }
          return null;
          }
          private String nvl(Object o) {
          if (o == null)
          return "";
          else
          return o.toString();
          }
          }
          

          posted @ 2009-03-15 22:20 董銳 閱讀(852) | 評(píng)論 (0)編輯 收藏

          轉(zhuǎn)自:http://www.nabble.com/sctx.getScriptSessionsByPage%28%29-problems-td19552209.html#a19552209

          Hi,

          Thanks for your response. So for the following code what is the updated
          version?

          CODE:

          Update/modify the calling client only:

             WebContext wctx = WebContextFactory.get();
             if(wctx != null)
             {
               Util utilThis = new Util(wctx.getScriptSession());
               utilThis.setValue("web Page Element Name", "Web Page Element Value");
             }


          import org.directwebremoting.ui.dwr.Util; /* i.e. NOT proxy.dwr.Util */
          Util.setValue("web Page Element Name", "Web Page Element Value");

           

           

          update all connected browsers viewing the relevant page:

           WebContext wctx = WebContextFactory.get();
           if (wctx != null)
           {
             String currentPage = wctx.getCurrentPage();
             Collection sessions = wctx.getScriptSessionsByPage(currentPage);
             Util utilAll = new Util(sessions);
             utilAll.addFunctionCall("createTable",tData);
           }

           


          final Object tData = ...;
          Browser.withCurrentPage(new Runnable() {
              public void run() {
                  ScriptSessions.addFunctionCall("createTable", tData);
              }
          });

           

           

          update all browsers for a specific page (non DWR started thread)

           servletContext = WebContextFactory.get().getServletContext();
           sctx = ServerContextFactory.get(servletContext);
           if (sctx != null)
           {
              Collection sessions = sctx.getScriptSessionsByPage("/stocksdemo/");
              Util utilAll = new Util(sessions);
              utilAll.addFunctionCall("function To Call","Data to pass");
           }

           


          Browser.withPage("/stocksdemo/",  new Runnable() {
              public void run() {

          posted @ 2009-03-14 22:19 董銳 閱讀(2911) | 評(píng)論 (0)編輯 收藏

          此篇文章甚好:
          http://www.ibm.com/developerworks/cn/java/j-jettydwr/index.html

          下載其示例代碼后,發(fā)現(xiàn)其使用的是dwr2.0.5的版本,
          現(xiàn)若要使用dwr3.0,需修改以下幾處代碼:
          ReverseAjaxTracker.java中:
          import org.directwebremoting.*;
          public ReverseAjaxTracker() {
              System.out.println("ReverseAjaxTracker");
            //  WebContext wctx = WebContextFactory.get();  這兩行注釋掉
            //  sctx = ServerContextFactory.get(wctx.getServletContext());

              RandomWalkGenerator.getInstance().addListener(this);
            }
          //OnCoord方法修改為如下幾句,原來(lái)的可全部注釋掉
          public void onCoord(final GpsCoord gpsCoord) {
              System.out.println("onCoord");
              Browser.withPage(mapPageUrl,  new Runnable() {
                  public void run() {
                      ScriptSessions.addFunctionCall("updateCoordinate",gpsCoord);
                  }
              });

          }

          就可以測(cè)試通過(guò)了!

          posted @ 2009-03-14 22:14 董銳 閱讀(280) | 評(píng)論 (0)編輯 收藏

          僅列出標(biāo)題
          共5頁(yè): 上一頁(yè) 1 2 3 4 5 下一頁(yè) 
          主站蜘蛛池模板: 芜湖县| 广灵县| 康马县| 辽阳县| 古浪县| 南京市| 密云县| 阿城市| 新宁县| 栾川县| 休宁县| 巴林右旗| 泰兴市| 莒南县| 乌恰县| 郁南县| 土默特左旗| 四子王旗| 湟中县| 万源市| 广饶县| 丰原市| 南安市| 孟连| 右玉县| 类乌齐县| 辽阳县| 确山县| 凯里市| 宾川县| 博客| 正定县| 修水县| 安义县| 西丰县| 洪洞县| 石楼县| 尉犁县| 平乐县| 苏尼特左旗| 黄山市|