seasun |
|
|||
在不斷模仿、思考、總結中一步一步進步! |
公告
日歷
導航常用鏈接隨筆分類
good blog author積分與排名
最新評論
閱讀排行榜
|
Display Tag Lib是一個標簽庫,用來處理jsp網頁上的Table,功能非常強,可以對的Table進行分頁、數據導出、分組、對列排序等等,反正我在做項目時需要的功能它都給我提供了,而且使用起來非常的方便。能夠大大減少代碼量。
介個是Display Tag的官方網站 首先當然是要下載它的jar包了,這里可以下載到最新的版本。將jar包放到WEB-INF的lib文件夾下。另外還需要兩個輔助包:apache的commons-lang和standard包,更多的輔助包可以在這里下載。 在web.xml下添加一個filter <filter> <filter-name>exportFilter</filter-name> <filter-class>org.displaytag.filter.ResponseOverrideFilter</filter-class> </filter> 在jsp頁面做一個引用: <%@ taglib uri="http://displaytag.sf.net/el" prefix="display" %> 首先我們定義一個list <% List test = new ArrayList( 6 ); test.add( "Test String 1" ); test.add( "Test String 2" ); test.add( "Test String 3" ); test.add( "Test String 4" ); test.add( "Test String 5" ); test.add( "Test String 6" ); request.setAttribute( "test", test ); %> 當我們想在jsp頁面上顯示這個list時,我們只需要寫一句話 <display:table name="test" /> display tag會自動生成一個table 如果list是從控制層拋出來的,name可使用EL表達式表示 <display:table name="$" /> 這是最簡單的display tag的使用,我們可以給它加上樣式等,也可以定義顯示的列,下面的table顯示復雜一些 <display:table name="test" styleClass="list" cellspacing="0" cellpadding="0"> <display:column property="id" title="ID" class="idcol"/> <display:column property="name" /> <display:column property="email" /> <display:column property="description" title="Comments"/> </display:table> 如果想要給它加個鏈接也很簡單,下面的代碼給name加了連接,并附帶id參數,email也自動連接到mailto:XXX <display:table name="test" styleClass="list" cellspacing="0" cellpadding="0"> <display:column property="id" title="ID" class="idcol"/> <display:column property="name" url="detail.jsp" paramId="id" paramProperty="id"/> <display:column property="email" autolink="true"/> <display:column property="description" title="Comments"/> </display:table> 下面介紹幾個Display最常用的功能,更多功能請參考http://displaytag.homeip.net/displaytag-examples-1.1/。 2. 對列排序 4. Display Tag的屬性設置 5. 其它功能 轉載 :http://www.javaeye.com/wiki/Java_Newbie/945-java-programmers-recommendation-books
作為Java程序員來說,最痛苦的事情莫過于可以選擇的范圍太廣,可以讀的書太多,往往容易無所適從。我想就我自己讀過的技術書籍中挑選出來一些,按照學習的先后順序,推薦給大家,特別是那些想不斷提高自己技術水平的Java程序員們。 在這份推薦閱讀書籍的名單中,我沒有列舉流行的軟件框架類學習書籍,例如Struts,Hibernate,Spring之類,也沒有列舉AJAX方面的書籍。是因為這類書籍容易過時,而上述的大半書籍的生命周期都足夠長,值得你去購買和收藏。 Java編程入門類
對于沒有Java編程經驗的程序員要入門,隨便讀什么入門書籍都一樣,這個階段需要你快速的掌握Java基礎語法和基本用法,宗旨就是“囫圇吞棗不求甚解”,先對Java熟悉起來再說。用很短的時間快速過一遍Java語法,連懵帶猜多寫寫代碼,要“知其然”。
1、《Java編程思想》 ![]() 在有了一定的Java編程經驗之后,你需要“知其所以然”了。這個時候《Java編程思想》是一本讓你知其所以然的好書,它對于基本的面向對象知識有比較清楚的交待,對Java基本語法,基本類庫有比較清楚的講解,可以幫你打一個良好的Java編程基礎。這本書的缺點是實在太厚,也比較羅嗦,不適合現代人快節奏學習,因此看這本書要懂得取舍,不是每章每節都值得一看的,挑重點的深入看就可以了。 2、《Agile Java》中文版 ![]() 這本書是出版社送給我的,我一拿到就束之高閣,放在書柜一頁都沒有翻過,但是前兩天整理書柜的時候,拿出來一翻,竟然發現這絕對是一本好書!這本書一大特點是以單元測試和TDD來貫穿全書的,在教你Java各種重要的基礎知識的過程中,潛移默化的影響你的編程思維走向敏捷,走向TDD。另外這本書成書很新,以JDK5.0的語法為基礎講解,要學習JDK5.0的新語法也不錯。還有這本書對于內容取舍也非常得當,Java語言畢竟類庫龐大,可以講的內容太多,這本書選擇的內容以及內容的多寡都很得當,可以讓你以最少的時間掌握Java最重要的知識,順便培養出來優秀的編程思路,真是一本不可多得的好書。 雖然作者自己把這本書定位在入門級別,但我不確定這本書用來入門是不是稍微深了點。 Java編程進階類
打下一個良好的Java基礎,還需要更多的實踐經驗積累,我想沒有什么捷徑。有兩本書值得你在編程生涯的這個階段閱讀,培養良好的編程習慣,提高你的代碼質量。
1、《重構 改善既有代碼的設計》 ![]() 這本書名氣很大,不用多介紹,可以在閑暇的時候多翻翻,多和自己的實踐相互印證。這本書對你產生影響是潛移默化的。 2、《測試驅動開發 by Example》 ![]() 本書最大特點是很薄,看起來沒有什么負擔。你可以找一個周末的下午,一邊看,一邊照做,一個下午就把書看完,這本書的所有例子跑完了。這本書的作用是通過實戰讓你培養TDD的思路。 Java架構師之路
到這個階段,你應該已經非常嫻熟的運用Java編程,而且有了一個良好的編程思路和習慣了,但是你可能還缺乏對應用軟件整體架構的把握,現在就是你邁向架構師的第一步。
1、《Expert One-on-One J2EE Design and Development》 ![]() 這本書是Rod Johnson的成名著作,非常經典,從這本書中的代碼誕生了springframework。但是好像這本書沒有中譯本。 2、《Expert One-on-One J2EE Development without EJB》 ![]() 這本書由gigix組織翻譯,多位業界專家參與,雖然署名譯者是JavaEye,其實JavaEye出力不多,實在是忝居譯者之名。 以上兩本書都是Rod Johnson的經典名著,Java架構師的必讀書籍。在我所推薦的這些書籍當中,是我看過的最仔細,最認真的書,我當時讀這本書幾乎是廢寢忘食的一氣讀完的,有小時候挑燈夜讀金庸武俠小說的勁頭,書中所講內容和自己的經驗知識一一印證,又被無比精辟的總結出來,讀完這本書以后,我有種被打通經脈,功力爆增的感覺。 但是后來我看過一些其他人的評價,似乎閱讀體驗并沒有我那么high,也許是因為每個人的知識積累和經驗不同導致的。我那個時候剛好是經驗知識積累已經足夠豐富,但是還沒有系統的整理成型,讓這本書一梳理,立刻形成完整的知識體系了。 3、《企業應用架構模式》 ![]() Martin的又一本名著,但這本書我只是泛泛的看了一遍,并沒有仔細看。這本書似乎更適合做框架的人去看,例如如果你打算自己寫一個ORM的話,這本書是一定要看的。但是做應用的人,不看貌似也無所謂,但是如果有空,我還是推薦認真看看,會讓你知道框架為什么要這樣設計,這樣你的層次可以晉升到框架設計者的角度去思考問題。Martin的書我向來都是推崇,但是從來都沒有像Rod Johnson的書那樣非常認真去看。 4、《敏捷軟件開發 原則、模式與實踐》 ![]() Uncle Bob的名著,敏捷的經典名著,這本書比較特別,與其說是講軟件開發過程的書,不如說講軟件架構的書,本書用了很大篇幅講各種面向對象軟件開發的各種模式,個人以為看了這本書,就不必看GoF的《設計模式》了。 軟件開發過程
了解軟件開發過程不單純是提高程序員個人的良好編程習慣,也是增強團隊協作的基礎。
1、《UML精粹》 ![]() UML其實和軟件開發過程沒有什么必然聯系,卻是軟件團隊協作溝通,撰寫軟件文檔需要的工具。但是UML真正實用的圖不多,看看這本書已經足夠了,完全沒有必要去啃《UML用戶指南》之類的東西。要提醒大家的是,這本書的中譯本翻譯的非常之爛,建議有條件的看英文原版。 2、《解析極限編程 擁抱變化》XP ![]() 這是Kent Beck名著的第二版,中英文對照。沒什么好說的,必讀書籍。 3、《統一軟件開發過程》UP ![]() 其實UP和敏捷并不一定沖突,UP也非常強調迭代,測試,但是UP強調的文檔和過程驅動卻是敏捷所不取的。不管怎么說,UP值得你去讀,畢竟在中國真正接受敏捷的企業很少,你還是需要用UP來武裝一下自己的,哪怕是披著UP的XP。 4、《敏捷建模》AM ![]() Scott Ambler的名著,這本書非常的progmatic,告訴你怎么既敏捷又UP,把敏捷和UP統一起來了,又提出了很多progmatic的建議和做法。你可以把《解析極限編程 擁抱變化》、《統一軟件開發過程》和《敏捷建?!愤@三本書放在一起讀,看XP和UP的不同點,再看AM是怎么統一XP和UP的,把這三種理論融為一爐,形成自己的理論體系,那么你也可以去寫書了。 軟件項目管理
如果你突然被領導提拔為項目經理,而你完全沒有項目管理經驗,你肯定會心里沒底;如果你覺得自己管理項目不善,很想改善你的項目管理能力,那么去考PMP肯定是遠水不解近渴的。
1、《快速軟件開發》 ![]() 這也是一本名著。可以這樣說,有本書在手,你就有了一個項目管理的高級參謀給你出謀劃策,再也不必擔心自己不能勝任的問題了。這本書不是講管理的理論的,在實際的項目管理中,講這些理論是不解決問題的,這本書有點類似于“軟件項目點子大全”之類的東西,列舉了種種軟件項目當中面臨的各種問題,以及應該如何解決問題的點子,你只需要稍加變通,找方抓藥就行了。 <?xml version="1.0" encoding="GBK"?> <!-- 定義過濾器鏈 --> <!-- 定義一個Listener,該Listener在應用啟動時創建Spring容器 --> 一、基本概念
1、Sitemesh是一種頁面裝飾技術 :
![]() ![]() ![]() ![]() ![]() 2、在sitemesh中,頁面分為兩種:裝飾模板和普通頁面。
1)裝飾模板,是指用于修飾其它頁面的頁面。 2)普通頁面,一般指各種應用頁面。 二、模板修飾網頁的原理
![]() ![]() ![]() 通過Sitemesh的注冊機制,告訴Sitemesh,當訪問該路徑時使用XXX模板(假定使用前面那個模板)來修飾被訪問頁面。 ![]() 當用戶在左邊導航欄點擊“戲說長城”( /ShowGreatWall.do)時,右邊的“戲說長城”頁面將會被指定的模板修飾 ![]() 總結上面過程,Sitemesh修飾網頁的基本原理,可以通過下面來說明: ![]() 三、Sitemesh的配置與使用 1)WEB-INF/web.xml中加入filter定義與sitemesh的taglib定義
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 2)創建WEB-INF/decorators.xml,在該文件中配置有哪些模板,以及每個模板具體修飾哪些URL,另外也可以配置哪些URL不需要模板控制 , decorators.xml的一個例子如下:
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 3)我們看一個修飾模板的例子
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 4)我們看一個被修飾的頁面的例子:
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 5)我們看一下裝飾模板中可以使用的Sitemesh標簽
![]() 取出被裝飾頁面的head標簽中的內容。
![]() 取出被裝飾頁面的body標簽中的內容。
![]() ![]() 取出被裝飾頁面的title標簽中的內容。default為默認值
![]() ![]() ![]() ![]() 取出被裝飾頁面相關標簽的屬性值。
![]() Html標簽的屬性
Body標簽的屬性 Meta標簽的屬性 ![]() default是默認值
![]() ![]() 將被裝飾頁面構造為一個對象,可以在裝飾頁面的JSP中直接引用。
6)看一個在裝飾模板中使用標簽的例子
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 7)看一下相應的在被修飾頁面中的代碼:
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 四、總結
1,Sitemesh最為重要的就是做用于修飾的模板,并在decorators.xml中配置這些模板用于修飾哪些頁面。因此使用Sitemesh的主要過程就是:做裝飾模板,然后在decorators.xml中配置URL Pattern 2,分析整個工程,看哪些頁面需要抽象成模板,例如二級頁面、三級頁面、彈出窗口等等可能都需要做成相應的模板,一般來說,一個大型的OA系統,模板不會超過8個。 如果某個特殊的需求請求路徑在過濾器的范圍內,但又不想使用模板怎么辦? 你總不能這么不講道理吧! 大家放心吧,SiteMesh早就考慮到這一點了,上面第5步說道的decorators.xml這個時候就起到作用了! 下面是我的decorators.xml: <?xml version="1.0" encoding="ISO-8859-1"?>
<decorators defaultdir="/decorators"> <!-- Any urls that are excluded will never be decorated by Sitemesh --> <excludes> <pattern>/index.jsp*</pattern> <pattern>/login/*</pattern> </excludes> <decorator name="main" page="main.jsp"> <pattern>/*</pattern> </decorator> </decorators> decorators.xml有兩個主要的結點:
decorator結點指定了模板的位置和文件名,通過pattern來指定哪些路徑引用哪個模板 excludes結點則指定了哪些路徑的請求不使用任何模板 如上面代碼,/index.jsp和凡是以/login/開頭的請求路徑一律不使用模板;
另外還有一點要注意的是:decorators結點的defaultdir屬性指定了模板文件存放的目錄;
struts.action.extension The URL extension to use to determine if the request is meant for a Struts action 用URL擴展名來確定是否這個請求是被用作Struts action,其實也就是設置 action的后綴,例如login.do的'do'字。 struts.configuration The org.apache.struts2.config.Configuration implementation class org.apache.struts2.config.Configuration接口名 struts.configuration.files A list of configuration files automatically loaded by Struts struts自動加載的一個配置文件列表 struts.configuration.xml.reload Whether to reload the XML configuration or not 是否加載xml配置(true,false) struts.continuations.package The package containing actions that use Rife continuations 含有actions的完整連續的package名稱 struts.custom.i18n.resources Location of additional localization properties files to load 加載附加的國際化屬性文件(不包含.properties后綴) struts.custom.properties Location of additional configuration properties files to load 加載附加的配置文件的位置 struts.devMode Whether Struts is in development mode or not 是否為struts開發模式 struts.dispatcher.parametersWorkaround Whether to use a Servlet request parameter workaround necessary for some versions of WebLogic (某些版本的weblogic專用)是否使用一個servlet請求參數工作區(PARAMETERSWORKAROUND) struts.enable.DynamicMethodInvocation Allows one to disable dynamic method invocation from the URL 允許動態方法調用 struts.freemarker.manager.classname The org.apache.struts2.views.freemarker.FreemarkerManager implementation class org.apache.struts2.views.freemarker.FreemarkerManager接口名 struts.i18n.encoding The encoding to use for localization messages 國際化信息內碼 struts.i18n.reload Whether the localization messages should automatically be reloaded 是否國際化信息自動加載 struts.locale The default locale for the Struts application 默認的國際化地區信息 struts.mapper.class The org.apache.struts2.dispatcher.mapper.ActionMapper implementation class org.apache.struts2.dispatcher.mapper.ActionMapper接口 struts.multipart.maxSize The maximize size of a multipart request (file upload) multipart請求信息的最大尺寸(文件上傳用) struts.multipart.parser The org.apache.struts2.dispatcher.multipart.MultiPartRequest parser implementation for a multipart request (file upload) 專為multipart請求信息使用的org.apache.struts2.dispatcher.multipart.MultiPartRequest解析器接口(文件上傳用) struts.multipart.saveDir The directory to use for storing uploaded files 設置存儲上傳文件的目錄夾 struts.objectFactory The com.opensymphony.xwork2.ObjectFactory implementation class com.opensymphony.xwork2.ObjectFactory接口(spring) struts.objectFactory.spring.autoWire Whether Spring should autoWire or not 是否自動綁定Spring struts.objectFactory.spring.useClassCache Whether Spring should use its class cache or not 是否spring應該使用自身的cache struts.objectTypeDeterminer The com.opensymphony.xwork2.util.ObjectTypeDeterminer implementation class com.opensymphony.xwork2.util.ObjectTypeDeterminer接口 struts.serve.static.browserCache If static content served by the Struts filter should set browser caching header properties or not 是否struts過濾器中提供的靜態內容應該被瀏覽器緩存在頭部屬性中 struts.serve.static Whether the Struts filter should serve static content or not 是否struts過濾器應該提供靜態內容 struts.tag.altSyntax Whether to use the alterative syntax for the tags or not 是否可以用替代的語法替代tags struts.ui.templateDir The directory containing UI templates UI templates的目錄夾 struts.ui.theme The default UI template theme 默認的UI template主題 struts.url.http.port The HTTP port used by Struts URLs 設置http端口 struts.url.https.port The HTTPS port used by Struts URLs 設置https端口 struts.url.includeParams The default includeParams method to generate Struts URLs 在url中產生 默認的includeParams struts.velocity.configfile The Velocity configuration file path velocity配置文件路徑 struts.velocity.contexts List of Velocity context names velocity的context列表 struts.velocity.manager.classname org.apache.struts2.views.velocity.VelocityManager implementation class org.apache.struts2.views.velocity.VelocityManager接口名 struts.velocity.toolboxlocation The location of the Velocity toolbox velocity工具盒的位置 struts.xslt.nocache Whether or not XSLT templates should not be cached 是否XSLT模版應該被緩存 struts.serve.static.browserCache 該屬性設置瀏覽器是否緩存靜態內容。當應用處于開發階段時,我們希望每次請求都獲得服務器的最新響應,則可設置該屬性為false。 struts.enable.DynamicMethodInvocation 該屬性設置Struts 2是否支持動態方法調用,該屬性的默認值是true。如果需要關閉動態方法調用,則可設置該屬性為false。 struts.enable.SlashesInActionNames 該屬性設置Struts 2是否允許在Action名中使用斜線,該屬性的默認值是false。如果開發者希望允許在Action名中使用斜線,則可設置該屬性為true。 struts.tag.altSyntax 該屬性指定是否允許在Struts 2標簽中使用表達式語法,因為通常都需要在標簽中使用表達式語法,故此屬性應該設置為true,該屬性的默認值是true。 struts.devMode該屬性設置Struts 2應用是否使用開發模式。如果設置該屬性為true,則可以在應用出錯時顯示更多、更友好的出錯提示。該屬性只接受true和flase兩個值,該屬性的默認值是false。通常,應用在開發階段,將該屬性設置為true,當進入產品發布階段后,則該屬性設置為false。 struts.i18n.reload該屬性設置是否每次HTTP請求到達時,系統都重新加載資源文件。該屬性默認值是false。在開發階段將該屬性設置為true會更有利于開發,但在產品發布階段應將該屬性設置為false。 提示 開發階段將該屬性設置了true,將可以在每次請求時都重新加載國際化資源文件,從而可以讓開發者看到實時開發效果;產品發布階段應該將該屬性設置為false,是為了提供響應性能,每次請求都需要重新加載資源文件會大大降低應用的性能。 struts.ui.theme該屬性指定視圖標簽默認的視圖主題,該屬性的默認值是xhtml。 struts.ui.templateDir該屬性指定視圖主題所需要模板文件的位置,該屬性的默認值是template,即默認加載template路徑下的模板文件。 struts.ui.templateSuffix該屬性指定模板文件的后綴,該屬性的默認屬性值是ftl。該屬性還允許使用ftl、vm或jsp,分別對應FreeMarker、Velocity和JSP模板。 struts.configuration.xml.reload該屬性設置當struts.xml文件改變后,系統是否自動重新加載該文件。該屬性的默認值是false。 struts.velocity.configfile該屬性指定Velocity框架所需的velocity.properties文件的位置。該屬性的默認值為velocity.properties。 struts.velocity.contexts該屬性指定Velocity框架的Context位置,如果該框架有多個Context,則多個Context之間以英文逗號(,)隔開。 struts.velocity.toolboxlocation該屬性指定Velocity框架的toolbox的位置。 struts.url.http.port該屬性指定Web應用所在的監聽端口。該屬性通常沒有太大的用戶,只是當Struts 2需要生成URL時(例如Url標簽),該屬性才提供Web應用的默認端口。 struts.url.https.port該屬性類似于struts.url.http.port屬性的作用,區別是該屬性指定的是Web應用的加密服務端口。 struts.url.includeParams該屬性指定Struts 2生成URL時是否包含請求參數。該屬性接受none、get和all三個屬性值,分別對應于不包含、僅包含GET類型請求參數和包含全部請求參數。 struts.custom.i18n.resources該屬性指定Struts 2應用所需要的國際化資源文件,如果有多份國際化資源文件,則多個資源文件的文件名以英文逗號(,)隔開。 struts.dispatcher.parametersWorkaround 對于某些Java EE服務器,不支持HttpServlet Request調用getParameterMap()方法,此時可以設置該屬性值為true來解決該問題。該屬性的默認值是false。對于 WebLogic、Orion和OC4J服務器,通常應該設置該屬性為true。 struts.freemarker.manager.classname 該屬性指定Struts 2使用的FreeMarker管理器。該屬性的默認值是 org.apache.struts2.views.freemarker.FreemarkerManager,這是Struts 2內建的FreeMarker管理器。 struts.freemarker.wrapper.altMap該屬性只支持true和false兩個屬性值,默認值是true。通常無需修改該屬性值。 struts.xslt.nocache 該屬性指定XSLT Result是否使用樣式表緩存。當應用處于開發階段時,該屬性通常被設置為true;當應用處于產品使用階段時,該屬性通常被設置為false。 struts.configuration.files 該屬性指定Struts 2框架默認加載的配置文件,如果需要指定默認加載多個配置文件,則多個配置文件的文件名之間以英文逗號(,)隔開。該屬性的默認值為struts- default.xml,struts-plugin.xml,struts.xml,看到該屬性值,讀者應該明白為什么Struts 2框架默認加載struts.xml文件了。 用過struts1.x的人都知道,標簽庫有html、bean、logic、tiles, S: <s:select list=""></s:select>-----單選框 <s:set name=""></s:set>-----賦予變量一個特定范圍內的值 <s:sort comparator=""></s:sort>-----通過屬性給list分類 <s:submit></s:submit>-----提交按鈕 <s:subset></s:subset>-----為遍歷集合輸出子集 T: <s:tabbedPanel id=""></s:tabbedPanel>-----表格框 <s:table></s:table>-----表格 <s:text name=""></s:text>-----I18n文本信息 <s:textarea></s:textarea>-----文本域輸入框 <s:textfield></s:textfield>-----文本輸入框 <s:token></s:token>-----攔截器 <s:tree></s:tree>-----樹 <s:treenode label=""></s:treenode>-----樹的結構 U: <s:updownselect list=""></s:updownselect>-----多選擇框 <s:url></s:url>-----創建url 1.1、概述 隨著WEB2.0及ajax思想在互聯網上的快速發展傳播,陸續出現了一些優秀的Js框架,其中比較著名的有Prototype、YUI、jQuery、mootools、Bindows以及國內的JSVM框架等,通過將這些JS框架應用到我們的項目中能夠使程序員從設計和書寫繁雜的JS應用中解脫出來,將關注點轉向功能需求而非實現細節上,從而提高項目的開發速度。 jQuery是繼prototype之后的又一個優秀的Javascript框架。它是由 John Resig 于 2006 年初創建的,它有助于簡化 JavaScript™ 以及Ajax 編程。有人使用這樣的一比喻來比較prototype和jQuery:prototype就像Java,而jQuery就像ruby. 它是一個簡潔快速靈活的JavaScript框架,它能讓你在你的網頁上簡單的操作文檔、處理事件、實現特效并為Web頁面添加Ajax交互。 它具有如下一些特點: 1、代碼簡練、語義易懂、學習快速、文檔豐富。 2、jQuery是一個輕量級的腳本,其代碼非常小巧,最新版的JavaScript包只有20K左右。 3、jQuery支持CSS1-CSS3,以及基本的xPath。 4、jQuery是跨瀏覽器的,它支持的瀏覽器包括IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+。 5、可以很容易的為jQuery擴展其他功能。 6、能將JS代碼和HTML代碼完全分離,便于代碼和維護和修改。 7、插件豐富,除了jQuery本身帶有的一些特效外,可以通過插件實現更多功能,如表單驗證、tab導航、拖放效果、表格排序、DataGrid,樹形菜單、圖像特效以及ajax上傳等。 jQuery的設計會改變你寫JavaScript代碼的方式,降低你學習使用JS操作網頁的復雜度,提高網頁JS開發效率,無論對于js初學者還是資深專家,jQuery都將是您的首選。 jQuery適合于設計師、開發者以及那些還好者,同樣適合用于商業開發,可以說jQuery適合任何JavaScript應用的地方,可用于不同的Web應用程序中。 官方站點:http://jquery.com/ 中文站點:http://jquery.org.cn/ 1.2、目的 通過學習本文檔,能夠對jQuery有一個簡單的認識了解,清楚JQuery與其他JS框架的不同,掌握jQuery的常用語法、使用技巧及注意事項。 二、使用方法 在需要使用JQuery的頁面中引入JQuery的js文件即可。 例如:<script type="text/javascript" src="js/jquery.js"></script> 引入之后便可在頁面的任意地方使用jQuery提供的語法。 三、學習教程及參考資料 請參照《jQuery中文API手冊》和http://jquery.org.cn/visual/cn/index.xml 推薦兩篇不錯的jquery教程:《jQuery的起點教程》和《使用 jQuery 簡化 Ajax 開發》 (說明:以上文檔都放在了【附件】中) 四、語法總結和注意事項 1、關于頁面元素的引用 通過jquery的$()引用元素包括通過id、class、元素名以及元素的層級關系及dom或者xpath條件等方法,且返回的對象為jquery對象(集合對象),不能直接調用dom定義的方法。 2、jQuery對象與dom對象的轉換 只有jquery對象才能使用jquery定義的方法。注意dom對象和jquery對象是有區別的,調用方法時要注意操作的是dom對象還是jquery對象。 普通的dom對象一般可以通過$()轉換成jquery對象。 如:$(document.getElementById("msg"))則為jquery對象,可以使用jquery的方法。 由于jquery對象本身是一個集合。所以如果jquery對象要轉換為dom對象則必須取出其中的某一項,一般可通過索引取出。 如:$("#msg")[0],$("div").eq(1)[0],$("div").get()[1],$("td")[5]這些都是dom對象,可以使用dom中的方法,但不能再使用Jquery的方法。 以下幾種寫法都是正確的: $("#msg").html(); $("#msg")[0].innerHTML; $("#msg").eq(0)[0].innerHTML; $("#msg").get(0).innerHTML; 3、如何獲取jQuery集合的某一項 對于獲取的元素集合,獲取其中的某一項(通過索引指定)可以使用eq或get(n)方法或者索引號獲取,要注意,eq返回的是jquery對象,而get (n)和索引返回的是dom元素對象。對于jquery對象只能使用jquery的方法,而dom對象只能使用dom的方法,如要獲取第三個< div>元素的內容。有如下兩種方法: $("div").eq(2).html(); //調用jquery對象的方法 $("div").get(2).innerHTML; //調用dom的方法屬性 4、同一函數實現set和get Jquery中的很多方法都是如此,主要包括如下幾個: $("#msg").html(); //返回id為msg的元素節點的html內容。 $("#msg").html("<b>new content</b>"); //將“<b>new content</b>” 作為html串寫入id為msg的元素節點內容中,頁面顯示粗體的new content $("#msg").text(); //返回id為msg的元素節點的文本內容。 $("#msg").text("<b>new content</b>"); //將“<b>new content</b>” 作為普通文本串寫入id為msg的元素節點內容中,頁面顯示粗體的<b>new content</b> $("#msg").height(); //返回id為msg的元素的高度 $("#msg").height("300"); //將id為msg的元素的高度設為300 $("#msg").width(); //返回id為msg的元素的寬度 $("#msg").width("300"); //將id為msg的元素的寬度設為300 $("input").val("); //返回表單輸入框的value值 $("input").val("test"); //將表單輸入框的value值設為test $("#msg").click(); //觸發id為msg的元素的單擊事件 $("#msg").click(fn); //為id為msg的元素單擊事件添加函數 同樣blur,focus,select,submit事件都可以有著兩種調用方法 5、集合處理功能 對于jquery返回的集合內容無需我們自己循環遍歷并對每個對象分別做處理,jquery已經為我們提供的很方便的方法進行集合的處理。 包括兩種形式: $("p").each(function(i){this.style.color=['#f00','#0f0','#00f']}) //為索引分別為0,1,2的p元素分別設定不同的字體顏色。 $("tr").each(function(i){this.style.backgroundColor=['#ccc','#fff'][i%2]}) //實現表格的隔行換色效果 $("p").click(function(){.html())}) //為每個p元素增加了click事件,單擊某個p元素則彈出其內容 6、擴展我們需要的功能 $.extend({ min: function(a, b){return a < b?a:b; }, max: function(a, b){return a > b?a:b; } }); //為jquery擴展了min,max兩個方法 使用擴展的方法(通過“$.方法名”調用): +",min="+$.min(10,20)); 7、支持方法的連寫 所謂連寫,即可以對一個jquery對象連續調用各種不同的方法。 例如: $("p").click(function(){.html())}) .mouseover(function(){}) .each(function(i){this.style.color=['#f00','#0f0','#00f']}); 8、操作元素的樣式 主要包括以下幾種方式: $("#msg").css("background"); //返回元素的背景顏色 $("#msg").css("background","#ccc") //設定元素背景為灰色 $("#msg").height(300); $("#msg").width("200"); //設定寬高 $("#msg").css({ color: "red", background: "blue" });//以名值對的形式設定樣式 $("#msg").addClass("select"); //為元素增加名稱為select的class $("#msg").removeClass("select"); //刪除元素名稱為select的class $("#msg").toggleClass("select"); //如果存在(不存在)就刪除(添加)名稱為select的class 9、完善的事件處理功能 Jquery已經為我們提供了各種事件處理方法,我們無需在html元素上直接寫事件,而可以直接為通過jquery獲取的對象添加事件。 如: $("#msg").click(function(){}) //為元素添加了單擊事件 $("p").click(function(i){this.style.color=['#f00','#0f0','#00f']}) //為三個不同的p元素單擊事件分別設定不同的處理 jQuery中幾個自定義的事件: (1)hover(fn1,fn2):一個模仿懸停事件(鼠標移動到一個對象上面及移出這個對象)的方法。當鼠標移動到一個匹配的元素上面時,會觸發指定的第一個函數。當鼠標移出這個元素時,會觸發指定的第二個函數。 //當鼠標放在表格的某行上時將class置為over,離開時置為out。 $("tr").hover(function(){ $(this).addClass("over"); }, function(){ $(this).addClass("out"); }); (2)ready(fn):當DOM載入就緒可以查詢及操縱時綁定一個要執行的函數。 $(document).ready(function(){}) //頁面加載完畢提示“Load Success”,相當于onload事件。與$(fn)等價 (3)toggle(evenFn,oddFn): 每次點擊時切換要調用的函數。如果點擊了一個匹配的元素,則觸發指定的第一個函數,當再次點擊同一元素時,則觸發指定的第二個函數。隨后的每次點擊都重復對這兩個函數的輪番調用。 //每次點擊時輪換添加和刪除名為selected的class。 $("p").toggle(function(){ $(this).addClass("selected"); },function(){ $(this).removeClass("selected"); }); (4)trigger(eventtype): 在每一個匹配的元素上觸發某類事件。 例如: $("p").trigger("click"); //觸發所有p元素的click事件 (5)bind(eventtype,fn),unbind(eventtype): 事件的綁定與反綁定 從每一個匹配的元素中(添加)刪除綁定的事件。 例如: $("p").bind("click", function(){.text());}); //為每個p元素添加單擊事件 $("p").unbind(); //刪除所有p元素上的所有事件 $("p").unbind("click") //刪除所有p元素上的單擊事件 10、幾個實用特效功能 其中toggle()和slidetoggle()方法提供了狀態切換功能。 如toggle()方法包括了hide()和show()方法。 slideToggle()方法包括了slideDown()和slideUp方法。 11、幾個有用的jQuery方法 $.browser.瀏覽器類型:檢測瀏覽器類型。有效參數:safari, opera, msie, mozilla。如檢測是否ie:$.browser.isie,是ie瀏覽器則返回true。 $.each(obj, fn):通用的迭代函數??捎糜诮频氐鷮ο蠛蛿到M(代替循環)。 如 $.each( [0,1,2], function(i, n){ ; }); 等價于: var tempArr=[0,1,2]; for(var i=0;i<tempArr.length;i++){ ; } 也可以處理json數據,如 $.each( { name: "John", lang: "JS" }, function(i, n){ ; }); 結果為: Name:name, Value:John Name:lang, Value:JS $.extend(target,prop1,propN):用一個或多個其他對象來擴展一個對象,返回這個被擴展的對象。這是jquery實現的繼承方式。 如: $.extend(settings, options); //合并settings和options,并將合并結果返回settings中,相當于options繼承setting并將繼承結果保存在setting中。 var settings = $.extend({}, defaults, options); //合并defaults和options,并將合并結果返回到setting中而不覆蓋default內容。 可以有多個參數(合并多項并返回) $.map(array, fn):數組映射。把一個數組中的項目(處理轉換后)保存到到另一個新數組中,并返回生成的新數組。 如: var tempArr=$.map( [0,1,2], function(i){ return i + 4; }); tempArr內容為:[4,5,6] var tempArr=$.map( [0,1,2], function(i){ return i > 0 ? i + 1 : null; }); tempArr內容為:[2,3] $.merge(arr1,arr2):合并兩個數組并刪除其中重復的項目。 如:$.merge( [0,1,2], [2,3,4] ) //返回[0,1,2,3,4] $.trim(str):刪除字符串兩端的空白字符。 如:$.trim(" hello, how are you? "); //返回"hello,how are you? " 12、解決自定義方法或其他類庫與jQuery的沖突 很多時候我們自己定義了$(id)方法來獲取一個元素,或者其他的一些js類庫如prototype也都定義了$方法,如果同時把這些內容放在一起就會引起變量方法定義沖突,Jquery對此專門提供了方法用于解決此問題。 使用jquery中的jQuery.noConflict();方法即可把變量$的控制權讓渡給第一個實現它的那個庫或之前自定義的$方法。之后應用 Jquery的時候只要將所有的$換成jQuery即可,如原來引用對象方法$("#msg")改為jQuery("#msg")。 如: jQuery.noConflict(); // 開始使用jQuery jQuery("div p").hide(); // 使用其他庫的 $() $("content").style.display = 'none'; 一、SiteMesh項目簡介 (http://www.opensymphony.com/sitemesh/ ) 二、為什么要使用SiteMesh? 三、SiteMesh VS Apache Tiles 五、如何使用SiteMesh 4、在下載的SiteMesh包中找到sitemesh.xml,(\sitemesh-2.3\src\example-webapp\WEB-INF目錄下就有) 5、在sitemesh.xml文件中有一個property結點(如下),該結點指定了decorators.xml在工程中的位置,讓sitemesh.xml能找到他; 按照此路徑新建decorators.xml文件,當然這個路徑你可以任意改變,只要property結點的value值與其匹配就行; <%@ page language="java" pageEncoding="UTF-8"%> 這里放頁面底部
7、說到這里大家就要想了,那如果某個特殊的需求請求路徑在過濾器的范圍內,但又不想使用模板怎么辦? 你總不能這么不講道理吧!大家放心吧,SiteMesh早就考慮到這一點了,上面第5步說道的decorators.xml這個時候就起到作用了! decorators.xml有兩個主要的結點: 六、實戰感受 七、總結
模式,即pattern。其實就是解決某一類問題的方法論。你把解決某類問題的方法總結歸納到理論高度,那就是模式。 Alexander給出的經典定義是:每個模式都描述了一個在我們的環境中不斷出現的問題,然后描述了該問題的解決方案的核心。通過這種方式,你可以無數次地使用那些已有的解決方案,無需在重復相同的工作。 模式有不同的領域,建筑領域有建筑模式,軟件設計領域也有設計模式。當一個領域逐漸成熟的時候,自然會出現很多模式。 2.什么是框架? 3.為什么要用模式? 4.為什么要用框架? 軟件為什么要分層? 5.以下所述主要是JAVA,J2EE方面的模式和框架: 軟件設計模式太多,就我的理解簡單說一下最常見的MVC模式。 另外: UML(統一建模語言,Unified Modeling Language)是一種定義良好、易于表達、功能強大且普遍適用的可視化建模語言。它融入了軟件工程領域的新思想、新方法和新技術。它的作用域不限于支持面向對象的分析與設計,還支持從需求分析開始的軟件開發的全過程。在系統分析階段,我們一般用UML來畫很多圖,主要包括用例圖、狀態圖、類圖、活動圖、序列圖、協作圖、構建圖、配置圖等等,要畫哪些圖要根據具體情況而定。其實簡單的理解,也是個人的理解,UML的作用就是用很多圖從靜態和動態方面來全面描述我們將要開發的系統。 二. 用例建模簡介 用例建模是UML建模的一部分,在我眼里,它也是UML里最基礎的部分。用例建模的最主要功能就是用來表達系統的功能性需求或行為。 依我的理解用例建??煞譃橛美龍D和用例描述。用例圖由參與者(Actor)、用例(Use Case)、系統邊界、箭頭組成,用畫圖的方法來完成。用例描述用來詳細描述用例圖中每個用例,用文本文檔來完成。 1. 用例圖 參與者不是特指人,是指系統以外的,在使用系統或與系統交互中所扮演的角色。因此參與者可以是人,可以是事物,也可以是時間或其他系統等等。還有一點要注意的是,參與者不是指人或事物本身,而是表示人或事物當時所扮演的角色。比如小明是圖書館的管理員,他參與圖書館管理系統的交互,這時他既可以作為管理員這個角色參與管理,也可以作為借書者向圖書館借書,在這里小明扮演了兩個角色,是兩個不同的參與者。參與者在畫圖中用簡筆人物畫來表示,人物下面附上參與者的名稱。 ![]() 用例是對包括變量在內的一組動作序列的描述,系統執行這些動作,并產生傳遞特定參與者的價值的可觀察結果。這是UML對用例的正式定義,對我們初學者可能有點難懂。我們可以這樣去理解,用例是參與者想要系統做的事情。對于對用例的命名,我們可以給用例取一個簡單、描述性的名稱,一般為帶有動作性的詞。用例在畫圖中用橢圓來表示,橢圓下面附上用例的名稱。 ![]() 系統邊界是用來表示正在建模系統的邊界。邊界內表示系統的組成部分,邊界外表示系統外部。系統邊界在畫圖中方框來表示,同時附上系統的名稱,參與者畫在邊界的外面,用例畫在邊界里面。因為系統邊界的作用有時候不是很明顯,所以我個人理解,在畫圖時可省略。 箭頭用來表示參與者和系統通過相互發送信號或消息進行交互的關聯關系。箭頭尾部用來表示啟動交互的一方,箭頭頭部用來表示被啟動的一方,其中用例總是要由參與者來啟動。 2. 用例描述 用例圖只是簡單地用圖描述了一下系統,但對于每個用例,我們還需要有詳細的說明,這樣就可以讓別人對這個系統有一個更加詳細的了解,這時我們就需要寫用例描述。 對于用例描述的內容,一般沒有硬性規定的格式,但一些必須或者重要的內容還是必須要寫進用例描述里面的。用例描述一般包括:簡要描述(說明)、前置(前提)條件、基本事件流、其他事件流、異常事件流、后置(事后)條件等等。下面說說各個部分的意思: 簡要描述:對用例的角色、目的的簡要描述; 前置條件:執行用例之前系統必須要處于的狀態,或者要滿足的條件; 基本事件流:描述該用例的基本流程,指每個流程都“正常”運作時所發生的事情,沒有任何備選流和異常流,而只有最有可能發生的事件流; 其他事件流:表示這個行為或流程是可選的或備選的,并不是總要總要執行它們; 異常事件流:表示發生了某些非正常的事情所要執行的流程; 后置條件:用例一旦執行后系統所處的狀態; UML的作用就是用很多圖從靜態和動態方面來全面描述我們將要開發的系統 三. 用例圖和用例描述設計實例 這里用我開發的一個家教網站來簡單的分析用例圖的畫法和用例描述的寫法。這個網站我用UML完整的分析一下,以下我提取了用例圖和用例描述的部分。這個家教網站分為前臺客戶系統和后臺管理系統。 前臺客戶系統的用例圖如下: ![]() 后臺管理系統用例圖如下: ![]() 對于用例描述,篇幅有限,我在這里只列了后臺管理系統中的網站公告發布這個用例的描述。如下:
|
![]() |
|
Copyright © shiwf | Powered by: 博客園 模板提供:滬江博客 |