": "
<url address="http://data.ent.sina.com.cn/star/starlist.php?&initial=A&tpl=0&dpc=1"></url>
<img tagText="p class="bigphoto"" toExcelName="照片"></img>
posted @ 2009-09-18 13:40 董銳 閱讀(148) | 評(píng)論 (0) | 編輯 收藏
&:&
": " <url address="http://data.ent.sina.com.cn/star/starlist.php?&initial=A&tpl=0&dpc=1"></url> <img tagText="p class="bigphoto"" 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 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:
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)
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) | 編輯 收藏 |
||