java基礎(chǔ)-struts2、spring和hibernate應(yīng)用實(shí)例Struts作為MVC2Web框架自推出以來(lái)不斷受到開(kāi)發(fā)者追_第1頁(yè)
java基礎(chǔ)-struts2、spring和hibernate應(yīng)用實(shí)例Struts作為MVC2Web框架自推出以來(lái)不斷受到開(kāi)發(fā)者追_第2頁(yè)
java基礎(chǔ)-struts2、spring和hibernate應(yīng)用實(shí)例Struts作為MVC2Web框架自推出以來(lái)不斷受到開(kāi)發(fā)者追_第3頁(yè)
java基礎(chǔ)-struts2、spring和hibernate應(yīng)用實(shí)例Struts作為MVC2Web框架自推出以來(lái)不斷受到開(kāi)發(fā)者追_第4頁(yè)
java基礎(chǔ)-struts2、spring和hibernate應(yīng)用實(shí)例Struts作為MVC2Web框架自推出以來(lái)不斷受到開(kāi)發(fā)者追_第5頁(yè)
已閱讀5頁(yè),還剩36頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Struts2、SpringHibernateStruts作為MVC2Web框架,自推出以來(lái)不斷受到開(kāi)發(fā)者的追捧,得到廣泛Web框架,Struts自然擁有眾多的優(yōu)點(diǎn):MVC2模型的Librarystruts2發(fā)布已經(jīng)很久了但關(guān)于如何使用它的及實(shí)例并不多特別是與Spring及Hibernate等流行框架的集成并不多見(jiàn)現(xiàn)在就將筆者使用Myeclipse工具應(yīng)用struts2+spring2+hibernate3實(shí)現(xiàn)CRUD操作的步驟一一下來(lái)為初學(xué)者Struts2.0.6Spring2.0.6和Hibernate3.1在自己的項(xiàng)目中,根據(jù)實(shí)際情況,盡快的過(guò)渡到Struts2的時(shí)代。本文的內(nèi)容基于Struts2.0.6。一、準(zhǔn)備工spring2與1.x區(qū)別不大,可以平滑的過(guò)度,筆者也是把spring1.28換成了spring2.0.6,算是升級(jí)到spring2.0了。struts2webwork2.2,與以前的Tomcat5.5+struts2+Spring2.0.6+Hibernate3.1。本示例通過(guò)對(duì)一個(gè)進(jìn)行管理的lib包需要以下右圖所示的這些包。其中Struts2.0.6的地址為Hibernate3.1Hibernate3.1spring2.0.6 地址為使用的數(shù)據(jù)庫(kù)為 5.0,使用的 驅(qū)動(dòng) 包為創(chuàng)建數(shù)據(jù)表的sql語(yǔ)句為:createdatabasegame`book_id`int(11)NOTNULLdefault`book_name`varchar(200)charactersetgb2312default`book_author`varchar(100)charactersetgb2312default`book_publish`varchar(100)charactersetgb2312default`book_date`datedefault`book_isbn`varchar(20)default`book_page`int(11)default`book_price`decimal(10,2)default`book_content`varchar(100)charactersetgb2312defaultNULL,PRIMARYKEY 二、建立公共1、ActionStruts2和Struts1.xStruts2是一個(gè)pull-MVCStruts1.xorg.apache.struts.action.ActionFormBean中。Struts2Action中,通過(guò)Getter和Setter獲取。Struts2的Action在實(shí)際編程過(guò)程中,為了更加方便的實(shí)現(xiàn)Action,大多數(shù)情況下都會(huì)繼承com.opensymphony.xwork2.ActionSupport(OverrideStringexecute()方法。因此先建立抽象類(lèi),以供其它Action類(lèi)使用。 importcom.opensymphony.xwork2.ActionSupport;public ActionextendsActionSupport} 參考JavaDoc,可知ActionSupport類(lèi)實(shí)現(xiàn)了接口:2、Pager分頁(yè) importjava.math.*;publicclassPagerprivateinttotalRowsprivateintpageSize5;每頁(yè)顯示的行數(shù)privateintcurrentPage;//當(dāng)前頁(yè)號(hào)privateinttotalPagesprivateintstartRow;publicPager()}publicPager(int_totalRows){totalRows=_totalRows;intmod=totalRows%pageSize;}currentPage=startRow=}publicintgetStartRow(){returnstartRow;}publicintgetTotalPages(){returntotalPages;}publicintgetCurrentPage(){returncurrentPage;}publicintgetPageSize(){returnpageSize;}publicvoidsetTotalRows(inttotalRows){this.totalRows=totalRows;}publicvoidsetStartRow(intstartRow){this.startRow=startRow;}publicvoidsetTotalPages(inttotalPages){this.totalPages=totalPages;}publicvoidsetCurrentPage(intcurrentPage){this.currentPage=currentPage;}publicvoidsetPageSize(intpageSize){this.pageSize=pageSize;}publicintgetTotalRows(){returntotalRows;}publicvoidfirst(){currentPage=1;startRow=}publicvoidprevious(){if(currentPage==1){}currentstartRow=(current1)*}publicvoidnext()if(currentPage<totalPages){}startRow=(current1)*}publicvoidlast(){currentPage=totalPages;startRow=(current1)*}publicvoidrefresh(int_currentPage){currentPage=_currentPage;if(currentPage>totalPages){}}}同時(shí),采用PagerService類(lèi)來(lái)發(fā)布成為分頁(yè)類(lèi)服務(wù)PagerService publicclassPagerServicepublicPagergetPager(StringcurrentPage,StringpagerMethod,inttotalRows) 定義pagerPagerpager=new 如果不為空,則刷新pagerif(currentPage!=null){} if(pagerMethod!=null){if(pagerMethod.equals("first")){}elseif(pagerMethod.equals("previous")){}elseif(pagerMethod.equals("next")){}elseif(pagerMethod.equals("last")){}}return}}三、立數(shù)據(jù)持久化1、編寫(xiě)實(shí)體類(lèi)Books及books.hbm.xmlpackagecom.sterning.books.model;importjava.util.Date;publicclassBooks privateStringbookId;//編號(hào)privateStringbookName;//書(shū)名privateStringbookAuthor;//作者privateStringbookPublish;//privateDatebookDate;//日期privateStringbookIsbn;//ISBNprivateStringbookPage;//頁(yè)數(shù)privateStringbookPrice;//價(jià)格privateStringbookContent;//內(nèi)容提 publicBooks(){} PropertypublicStringgetBookId(){returnbookId;}publicvoidsetBookId(StringbookId){this.bookId=bookId;}publicStringgetBookName(){returnbookName;}publicvoidsetBookName(StringbookName)this.bookName=}publicStringgetBookAuthor(){returnbookAuthor;}publicvoidsetBookAuthor(StringbookAuthor){this.bookAuthor=bookAuthor;}publicStringgetBookContent(){returnbookContent;}publicvoidsetBookContent(StringbookContent){this.bookContent=bookContent;}publicDategetBookDate(){returnbookDate;}publicvoidsetBookDate(DatebookDate){this.bookDate=bookDate;}publicStringgetBookIsbn(){returnbookIsbn;}publicvoidsetBookIsbn(StringbookIsbn){this.bookIsbn=bookIsbn;}publicStringgetBookPage(){returnbookPage;}publicvoidsetBookPage(StringbookPage){this.bookPage=bookPage;}publicStringgetBookPrice(){returnbookPrice;}publicvoidsetBookPrice(StringbookPrice){this.bookPrice=bookPrice;}publicStringgetBookPublish(){returnbookPublish;}publicvoidsetBookPublish(StringbookPublish){this.bookPublish=bookPublish;}}接下來(lái)要把實(shí)體類(lèi)Books的屬性映射到books表,編寫(xiě)下面的books.hbm.xml文件<?xml<!DOCTYPEhibernate-mapPUBLIC"-//Hibernate/HibernateMapDTD"<idname="bookId"<columnname="book_id"length="5"<generatorclass="assigned"<propertyname="bookName"<columnname="book_name"length="100"<propertyname="bookAuthor"<columnname="book_author"length="100"<propertyname="bookPublish"<columnname="book_publish"length="100"<propertyname="bookDate"<columnname="book_date"length="7"<propertyname="bookIsbn"<columnname="book_isbn"length="20"<propertyname="bookPage"<columnname="book_page"length="11"<propertyname="bookPrice"<columnname="book_price"length="4"<propertyname="bookContent"<columnname="book_content"length="100"2、hibernate.cfg.xml(<!DOCTYPEhibernate-configuration"-//Hibernate/HibernateConfigurationDTD3.0//EN"<session-<property<mapresource="com/sterning/books/model/books.hbm.xml"></map</session-四、建立DAO層DAO層負(fù)責(zé)封裝底層的數(shù)據(jù)細(xì)節(jié),不僅可以使概念清晰,而且可以1DAOpackagecom.sterning.books.dao.iface;importjava.util.List;importcom.sterning.books.model.Books;publicinterfaceBooksDao{ListgetAll();//ListgetBooks(intpageSizeintstartRow);//獲得所有記錄intgetRows();//獲得總行數(shù)intgetRows(Stringfieldname,Stringvalue);//ListqueryBooks(Stringfieldname,Stringvalue);//根據(jù)條件查L(zhǎng)istgetBooks(Stringfieldname,Stringvalue,intpageSize,intstartRow);//根據(jù)條BooksgetBook(StringbookId);//根據(jù)IDStringgetMaxID();//獲得最大IDvoidaddBook(Booksbook);//添加記錄voidupdateBook(Booksbook);//修改記錄voiddeleteBook(Booksbook);//刪除記錄}packagecom.sterning.books.dao.hibernate;importjava.sql.SQLException;importjava.util.Iterator;importjava.util.List;importorg.hibernate.HibernateException;importorg.hibernate.Query;importimportimportorg.springframework.orm.hibernate3.support.HibernateDaoSupport;importcom.sterning.books.dao.iface.BooksDao;importcom.sterning.books.model.Books; *@author*publicclassBooksMapDaoextendsHibernateDaoSupportimplementsBooksDao{publicBooksMapDao(){}publicvoidaddBook(Booksbook){}publicvoiddeleteBook(Booksbook){}publicListgetAll()Stringsql="FROMBooksORDERBYbookName";returnthis.getHibernateTemplate().find(sql);}publicintgetRows()Stringsql="FROMBooksORDERBYbookName";Listlist=this.getHibernateTemplate().find(sql);returnlist.size();}publicListgetBooks(intpageSize,intstartRow)throwsHibernateException{finalintpageSize1=pageSize;finalint SQLException{TODOQueryquery=session.createQuery("FROMBooksORDERreturnquery.list();}}參數(shù)說(shuō)明:publicBooksgetBook(StringbookId)return}函數(shù)說(shuō)明:獲得最大返回值:最大publicStringgetMaxID()StringStringsql="SELECTMAX(bookId)+1FROM StringnoStr=Listll=(List)this.getHibernateTemplate().find(sql);Iteratoritr=ll.iterator();if(itr.hasNext()){Objectnoint=itr.next();if(noint==null){noStr=noStr=}}}elseif(noStr.length()==2){}elseif(noStr.length()==3){}return}publicvoidupdateBook(Bookspd){}publicListqueryBooks(Stringfieldname,Stringvalue){System.out.println("value:"+value);Stringsql="FROMBookswhere"+fieldname+"like'%"+value+"%'"+"ORDERBYreturn}publicintgetRows(Stringfieldname,Stringvalue){Stringsql="";sql="FROMBooksORDERBYbookName";sql="FROMBookswhere "+fieldname+"like '%"+value+"%'"+"ORDERBYListlist=this.getHibernateTemplate().find(sql);returnlist.size();}publicListgetBooks(Stringfieldname,Stringvalue,intpageSize,intstartRow){finalintpageSize1=pageSize;finalintfinalStringqueryName=fieldname;finalStringqueryValue=value;Stringsql="";)sql="FROMBooksORDERBYbookName";sql="FROMBookswhere "+fieldname+"like '%"+value+"%'"+"ORDERBYfinalString SQLException{TODOQueryquery=session.createQuery(sql1);return}}}五、業(yè)務(wù)邏輯層之上是業(yè)務(wù)邏輯層,DAO類(lèi)可以有很多個(gè),但業(yè)務(wù)邏輯類(lèi)應(yīng)該只有一個(gè),可DAO類(lèi)進(jìn)行操作。1、創(chuàng)建服務(wù)接口類(lèi)IBookServicepackagecom.sterning.books.services.iface;importjava.util.List;importpublicinterfaceIBooksServiceListgetAll();//ListgetBooks(intpageSizeintstartRow);//intgetRows();//獲得總行intgetRows(Stringfieldname,Stringvalue);//ListqueryBooks(Stringfieldname,Stringvalue);//根據(jù)條件查L(zhǎng)istgetBooks(Stringfieldname,Stringvalue,intpageSize,intstartRow);//根據(jù)條BooksgetBook(StringbookId);//根據(jù)IDStringgetMaxID();//獲得最大ID值voidaddBook(Bookspd);//添加記錄voidupdateBook(Bookspd);//修改記錄voiddeleteBook(StringbookId);//刪除記}packagecom.sterning.books.services;importjava.util.List;importcom.sterning.books.dao.iface.BooksDao;importcom.sterning.books.model.Books;importcom.sterning.books.services.iface.IBooksService;publicclassBooksServiceimplementsIBooksService{privateBooksDaobooksDao;publicpublicvoidaddBook(Booksbook){}publicvoiddeleteBook(StringbookId){Booksbook=booksDao.getBook(bookId);}publicListgetAll(){return}publicintgetRows(){returnbooksDao.getRows();}publicListgetBooks(intpageSize,intstartRow){returnbooksDao.getBooks(pageSize,startRow);}參數(shù)說(shuō)明:publicBooksgetBook(StringbookId){returnbooksDao.getBook(bookId);}函數(shù)說(shuō)明:獲得最大返回值:最大publicStringgetMaxID(){returnbooksDao.getMaxID();}publicvoidupdateBook(Booksbook){}publicListqueryBooks(Stringfieldname,Stringvalue){returnbooksDao.queryBooks(fieldname,value);}publicintgetRows(Stringfieldname,Stringvalue){returnbooksDao.getRows(fieldname,value);}publicListgetBooks(Stringfieldname,Stringvalue,intpageSize,intstartRow){returnbooksDao.getBooks(fieldname,value,pageSize,startRow);}publicBooksDaogetBooksDao(){returnbooksDao;}publicvoidsetBooksDao(BooksDaobooksDao){this.booksDao=booksDao;}}六、建Action有Struts1.x經(jīng)驗(yàn)的朋友都知道Action是Struts的內(nèi)容,當(dāng)然Struts2.0也不例外。不過(guò),Struts1.x與Struts2.0的Action模型很大的區(qū)別。Struts1.xStuts2.0必須繼承org.apache.struts.action.Action或者其子類(lèi)表單數(shù)據(jù)封裝在FormBean表單數(shù)據(jù)包含在A(yíng)ctionGetter和Setter1、建立BookActionpackagecom.sterning.books.web.actions;importjava.util.Collection;importimportcom.sterning.books.services.iface.IBooksService; publicclassBooksActionextends Action{privateIBooksServicebooksService;privatePagerServicepagerService;privateBooksbook;privatePagerprotectedCollectionavailableItems;protectedStringcurrentPage;protectedStringpagerMethod;protectedStringtotalRows;protectedStringbookId;protectedStringqueryName;protectedStringqueryValue;protectedStringprotectedStringqueryMap;publicStringlist()throwsException{if(queryMap==null||queryMap.equals("")){String[]str=queryMap.split("~");}pager=pagerService.getPager(this.getCurrentPage(),this.getPagerMethod(),ger.getPageSize(),pager.getStartRow());return}publicStringload()throwsException{book=return}publicStringsave()throwsException{}Stringid=this.getBook().getBookId();Booksbook=booksService.getBook(id);if(book==}return}publicStringdelete()throwsException{}return}publicBooksgetBook(){returnbook;}publicvoidsetBook(Booksbook){this.book=book;}}publicIBooksServicegetBooksService(){returnbooksService;}publicvoidsetBooksService(IBooksServicebooksService){this.booksService=booksService;}publicCollectiongetAvailableItems(){returnavailableItems;}publicStringgetCurrentPage(){returncurrentPage;}publicvoidsetCurrentPage(StringcurrentPage){this.currentPage=currentPage;}publicStringgetPagerMethod(){returnpagerMethod;}publicvoidsetPagerMethod(StringpagerMethod){this.pagerMethod=pagerMethod;}publicPagergetPager(){returnpager;}publicvoidsetPager(Pagerpager){this.pager=pager;}publicStringgetTotalRows(){returntotalRows;}publicvoidsetTotalRows(StringtotalRows){this.totalRows=totalRows;publicStringgetBookId(){returnbookId;}publicvoidsetBookId(StringbookId){this.bookId=bookId;}publicStringgetQueryName(){returnqueryName;}publicvoidsetQueryName(StringqueryName){this.queryName=queryName;}publicStringgetQueryValue(){returnqueryValue;}publicvoidsetQueryValue(StringqueryValue){this.queryValue=queryValue;}publicStringgetSearchName(){returnsearchName;}publicvoidsetSearchName(StringsearchName){this.searchName=searchName;}publicStringgetSearchValue(){returnsearchValue;}publicvoidsetSearchValue(StringsearchValue){this.searchValue=searchValue;}publicStringgetQueryMap(){returnqueryMap;publicvoidsetQueryMap(StringqueryMap){this.queryMap=queryMap;}publicPagerServicegetPagerService(){returnpagerService;}publicvoidsetPagerService(PagerServicepagerService){this.pagerService=pagerService;}}、默認(rèn)情況下,當(dāng)請(qǐng)求bookAction.action發(fā)生時(shí)(這個(gè)會(huì)在后面的Spring配置文件中見(jiàn)到的),Struts運(yùn)行時(shí)(Runtime)struts.xmlAction映射集(Map),實(shí)例化com.sterning.books.web.actions.BookAction類(lèi),并調(diào)用其execute方法。當(dāng)然,我們可以通過(guò)以下兩種方法改變這種默認(rèn)調(diào)用。這(Feature)有點(diǎn)類(lèi)似Struts1.x中的LookupDispathAction。在classes/sturts.xml中新建Action名后加上“!xxx(xxxcom.sterning.books.web.actions.BookAction.java中Action方法(execute)返回都是SUCCESS。這個(gè)屬性變量我并沒(méi)有定義,所以大家應(yīng)該會(huì)猜到它在A(yíng)ctionSupport或其父類(lèi)中定義。沒(méi)錯(cuò),SUCCESS在接口,LOGIN,NONE此外,我在配置Action時(shí)都沒(méi)有為result定義名字(name,所以它們默認(rèn)都為successStruts2.0中的result不僅僅是Struts1.x中forward的別名,它可以實(shí)現(xiàn)除forward外的很激動(dòng)人心的功能,如將Action輸出到FreeMaker模板、Velocity模板、JasperReportsXSLresulttype(類(lèi)型)屬性(Attribute)定義的。另外,您還可以自定義resultAction編寫(xiě)Getter和Setter,然后在JSPUI標(biāo)志的name與其對(duì)應(yīng),在提交表單到Action時(shí),我們就可以取得其值。(4)Struts2.0POJOthis.getBook().getBookPrice()。privateBooksbook所的是一個(gè)關(guān)于書(shū)的對(duì)象BookActoin.java類(lèi)中。這樣對(duì)我們開(kāi)發(fā)多層(5response或sessionexecute不像Struts1.x的那樣在參數(shù)WebStrutx2.0中可以有兩種方式獲得這些對(duì)象IoC(控制反轉(zhuǎn)InversionofControl)IoC非IoCStruts2.0com.opensymphony.xwork2.ActionContext外,org.apache.struts2.ServletActionContext作為輔助類(lèi)(HelperClass,可以幫HttpServletRequestrequest=ServletActionContext.getRequest();HttpServletResponseresponse=ServletActionContext.getResponse();HttpSessionsession=request.getSession();如果你只是想 IoC方要使用IoCIoC(Container)想取得某個(gè)對(duì)象的意愿,通過(guò)實(shí)現(xiàn)相應(yīng)的接口做到這點(diǎn)。如實(shí)現(xiàn)SessionAware,ServletRequestAware,ServletResponseAware接口,從而得到上面的對(duì)象。1、對(duì)BookAction類(lèi)的Save正如《WritingSecureCode》文中所寫(xiě)的名言Allinputisevil,的,對(duì)其傳進(jìn)來(lái)的數(shù)據(jù)須進(jìn)行校驗(yàn)。Struts2的校驗(yàn)框架十分簡(jiǎn)單方,在Xxx-validation.xml文件中的<message>元素中加入key在相應(yīng)的jsp文件中的<s:form>標(biāo)志中加入validate="true"屬性,就可以在用Javascript在客戶(hù)端校驗(yàn)數(shù)據(jù)。其驗(yàn)證文件為:BooksAction-save-<?xmlversion="1.0"encoding="UTF-<!DOCTYPEvalidatorsPUBLIC"-//OpenSymphony Group//XWorkValidator1.0//EN""/xwork/xwork-validator-1.0.dtd"><field<field-validator<message<field<field-validator<message<field<field-validator<message1、對(duì)BookAction類(lèi)的Save方法進(jìn)行驗(yàn)證的資源文件BooksAction資源文件的查找順序是有一定規(guī)則的之所以說(shuō)Struts2.0的更靈活是因?yàn)樗梢愿鶕?jù)不同需要配置和獲取資源(properties)Struts2.0(1們?cè)诓煌陌╬ackage)中被,如一些比較共用的出錯(cuò)提示;(2、使用包范圍內(nèi)的資源文件。做法是在包的根下新建名的pertiespackage_xx_XX.properties文件。這就適用于在包中不同類(lèi)ActionAction的包下新建文件名(除文件擴(kuò)展名外)與Action類(lèi)名同樣的資源文件。它只能在該Action中。如此一Actionproperties在A(yíng)ctonOne中titletitle在A(yíng)ctionTwo、使用<s:i18n>標(biāo)志特定路徑的properties文件。在使用這一方法時(shí),請(qǐng)注意<s:i18n>標(biāo)志的范圍。在<s:i18nname="xxxxx">到</s:i18n>之間,所有的國(guó)際化字符串都會(huì)在名為xxxxxStruts2.0就會(huì)輸出默認(rèn)值(字符串的名字。例如:某個(gè)ChildAction中調(diào)用了getText("user.title"),Struts2.0的將會(huì)執(zhí)行以下查找ChildAction_xx_XX.properties查找ChildActionMyIperties;查找ChildActionParentAction的properties判斷當(dāng)前ChildAction是否實(shí)現(xiàn)接口ModelDrivengetModel()獲得查找當(dāng)前包下的perties文件;查找鍵為title的資源;查找在perties輸出user.title七、Web頁(yè)在這一節(jié)中,主要使用到了Struts2的庫(kù)。在這里,會(huì)對(duì)所用到的主要做一個(gè)初步的介紹。的知識(shí)請(qǐng)讀者Struts的做的學(xué)習(xí)。在WebStruts1.x與Struts2.0(TagLibrary)Struts1.xStruts將標(biāo)志庫(kù)按功能分成HTML、Tiles、LogicBeanURI為“/struts-tags”命名空間下,不過(guò),我們可以從功能上將其分為兩大類(lèi):非UIUI標(biāo)志表達(dá)式語(yǔ)言(expressionlanguages)1、主頁(yè)面:index.jsp,其代碼如下<%@pagepageEncoding="UTF-8"contentType="text/html;charset=UTF-8"<%@taglibprefix="s"uri="/struts-tags"<metahttp-equiv="Content-Type"content="text/html;<p><ahref="<s:urlaction="list"/>">進(jìn)入管理系統(tǒng)JSPStruts2.0JSP的代碼的頂部加入以下代碼可以做到這點(diǎn)。<%@taglibprefix="s"uri="/struts-tags"%>1、<s:url>:該用于創(chuàng)建url,可以通過(guò)"param"提供request參數(shù)。當(dāng)includeParams的值時(shí)'all'或者'get',param中定義的參數(shù)將有優(yōu)先權(quán),也就是說(shuō)2<%@pagepageEncoding="gb2312"contentType="text/html;charset=UTF-8"<%@taglibprefix="s"uri="/struts-tags"<styletype="text/css">table{border:1pxsolidblack;border-collapse:collapse;}tabletheadtrthborder:1pxsolidblack;padding:3px;background-color:background-color:expression(this.rowIndex%2==0?"#FFFFFF"}tabletbodytrtdborder:1pxsolidblack;padding:3px;}}

background-color:expression(this.rowIndex%2==0?"#FFFFFF"<scriptlanguage="JavaScript">functiondoSearch(){ {alert("請(qǐng)輸入查詢(xún)關(guān)鍵字 }}<table<tr<select<optionvalue="bookName">書(shū)名<option<inputtype="text"name="searchValue"value=""<inputtype="button"value="查詢(xún)<tr<ahref="<s:urlaction="list"includeParams="none"/>">全部<ahref='<s:urlaction="edits:url>'>增加<tablecellspacing="0"<s:iterator<tr value="bookId"/></s:url>'><s:property<td><s:property<td><s:property <td><s:property<td><s:property value="bookId"/></s:url>'>刪除</a></td><tr<td共<s:propertyvalue="totalRows"/>行&第<s:propertyvalue="currentPage"/>頁(yè)&共<s:propertyvalue="pager.getTotalPages()"/>頁(yè)&<ahref="<s:url<s:paramname="currentPage"<s:paramname="pagerMethod"</s:url>">首頁(yè)<ahref="<s:url<s:paramname="currentPage"<s:paramname="pagerMethod"</s:url>">上一頁(yè)<ahref="<s:url<s:paramname="currentPage"<s:paramname="pagerMethod"</s:url>">下一頁(yè)<ahref="<s:url<s:paramname="currentPage"<s:paramname="pagerMethod"</s:url>">尾頁(yè)、<s:property>得到'value'的屬性,如果value沒(méi)提供,默認(rèn)為堆棧頂端的元素。否如果屬性是null則顯示的default是否escape否用來(lái)標(biāo)識(shí)元素的idUI和表單中為HTML的id(jav.utilIterator否如果設(shè)置此參數(shù),一個(gè)IteratorStatus的實(shí)例將會(huì)壓入每個(gè)遍歷的堆否要遍歷的可枚舉的(iteratable)數(shù)據(jù)源,或者將放入新列表(List)的對(duì)否用來(lái)標(biāo)識(shí)元素的idUI和表單中為HTML的id<s:param>:為其他提供參數(shù),比如include和bean.參數(shù)的name屬性是可選的,如果提供,會(huì)調(diào)用Component的方法addParameter(String,Object),如果不提供,則外層嵌套必須實(shí)現(xiàn)UnnamedParametric接口(如TextTag)。value的提供有兩種方式,通過(guò)value屬性或者中間的text,不同之處我們看一<paramname="color">blue</param><!--(A)--<paramname="color"value="blue"/><!--(B)--參數(shù)值會(huì)以String的格式放入該值會(huì)以java.lang.Object的格式放入否否value否用來(lái)標(biāo)識(shí)元素的idUI和表單中為HTML的id、是商業(yè)系統(tǒng)中不可或缺的一部分,所以無(wú)論您學(xué)習(xí)的是什么Web框架,它都是必須掌握的技能。其實(shí),Struts1.x在此部分已經(jīng)做得相當(dāng)不錯(cuò)了。它極大地簡(jiǎn)化了我們程序員在做時(shí)所需的工作,例如,如果您要輸出一條的信息,只需在代碼包中加入FILE-NAME_xx_XX.properties(其中FILE-NAME為默認(rèn)資源文件的文件名struts-config.xml中指明其路徑,Struts2.0并沒(méi)有在這部分止步,而是在原、list.jsp<s:textname="format.date"><s:paramvalue="bookDate"/></s:text>,為了正確的輸出日期的格式,采用在資源文件中定義輸出的格式,并在頁(yè)面上調(diào)用。format.date就是在資源文件com.sterning.books.web.actions.BooksAperties中定義。當(dāng)然也可以別的文件,放在別的路徑下,但此時(shí)需要在web.xml中在映射文件中(books.hbm.xml)設(shè)置為timestamp(包括日期和時(shí)間。為了便于管理,將日期格式保存在資源文件中。如:globalMessages或 format.date={0,date,yyyy-MM-在頁(yè)面顯示日期時(shí)間時(shí):<s:textname="format.date"><s:param3、增加/<%@pagepageEncoding="UTF-8"contentType="text/html;charset=UTF-8"<%@taglibprefix="s"uri="/struts-tags"<title>編輯<s:iftest="null==增加編輯<s:formname="editForm"action="save"<s:textfieldlabel="書(shū)名<s:textfieldlabel="作者<s:textfieldlabel="" 日 <s:textfieldlabel="ISBN"<s:textfieldlabel="頁(yè)數(shù)<s:textfieldlabel="價(jià)格(元<s:textfieldlabel="內(nèi)容"<s:iftest="null==<s:hiddenname="book.bookId"<s:hiddenname="book.bookId"<s:hiddenname="queryName"<p><ahref="<s:urlaction="list"/>">返回、<s:if>、<s:elseif>和<s:else>:執(zhí)行基本的條件流轉(zhuǎn)。其相關(guān)的參數(shù)及是else否用來(lái)標(biāo)識(shí)元素的idUI和表單中為HTML的id、<s:text>:支際化信息的。信息必須放在一個(gè)和當(dāng)前action同名的resourcebundle中,如果沒(méi)有找到相應(yīng)message,tagbody將被當(dāng)作默認(rèn)message,如果沒(méi)有tagbody,message的name會(huì)被作為默認(rèn)message。其是否用來(lái)標(biāo)識(shí)元素的idUI和表單中為HTML的id屬性八、配置Struts2Struts的配置文件都會(huì)在web.xml中的Struts<?xmlversion="1.0"encoding="UTF-8"<!DOCTYPEstruts"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN"<constantname="struts.enable.DynamicMethodInvocation"value="false"<constantname="struts.devMode"value="true"<constantname="struts.i18n.encoding"value="GBK"<!--Addpackageshere--struts_book.xml<?xmlversion="1.0"encoding="UTF-8"<!DOCTYPEstruts"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN"<packagename="products"extends="struts-<!--default-interceptor-refname="validation"/--<!--Addactionshere--<actionname="list"class="bookAction"<actionname="delete"class="bookAction"<result<actionname="*" <actionname="edit"class="bookAction"<actionname="save"class="bookAction"<interceptor-ref<interceptor-ref<result<result,文件中的<interceptor-refname="params"/>,使用了struts2自己的器器在A(yíng)OP(Aspect-OrientedProgramming)中用于在某個(gè)方法或字段被之前,進(jìn)行然后在之前或之后加入某些操作。是AOP的一種實(shí)現(xiàn)策略。,Struts2已經(jīng)提供了豐富多樣的,功能齊全的器實(shí)現(xiàn)。大家可以struts2-all-2.0.6.jarstruts2-core-2.0.6.jarstruts-default.xml查看關(guān)于默認(rèn)的器與器鏈的配置。在struts-default.xml中已經(jīng)配置了大量的器。如果您想要使用這些已有的攔截器,只需要在應(yīng)用程序struts.xml文件中通過(guò)“<includefile="struts-/>struts-default.xml文件包含進(jìn)來(lái)并繼承其中的struts-default(package最后在定義Action時(shí),使用“<interceptor-refname="xx"/>”器或器棧(interceptorstack。一旦您繼承了struts-default包(package,所有Action都會(huì)調(diào)用器?!猟efaultStack當(dāng)然在A(yíng)ction配置中加“<interceptor-refname="xx"/>”可以覆蓋defaultStack。(framework,皆準(zhǔn)的東西。雖然,Struts2為我們提供如此豐富的器實(shí)現(xiàn),但是這并不意味我們失去創(chuàng)建自定義器的能力,恰恰相反,在Struts2自定義器是相當(dāng)容易的一件事。所有的Struts2的器都直接或間接實(shí)現(xiàn)接口承類(lèi)erceptor. 九、置1、Spring的配置文件如下<?xmlversion="1.0"encoding="UTF- <!--dataSourceconfig--<beanid="dataSource"class=" <propertyname="driverClassName"value="com.mysql.jdbc.Driver"<propertyname="username"value="root"<propertyname="password"<beanid="sessionFactory"<property<ref<property <bean<property<ref<!--DAO-- <property<ref<!--Services--<beanid="booksService"<property<ref<beanid="pagerService" <!--view--<beanid="bookAction"class="com.sterning.books.web.actions.BooksAction"<property<ref<property<ref本來(lái)此文件應(yīng)該寫(xiě)在strutsspring的配置,所以放在spring的配置這里來(lái)講。struts.objectFactory=springstruts.i18n.encoding=struts.objectFactoObjectFactorycom.opensymphony.xwork2.ObjectFactory(spring來(lái)創(chuàng)建對(duì)象(如Action等。當(dāng)然,Spring的ContextLoaderListener器,會(huì)在web.xml文件中編寫(xiě),負(fù)責(zé)Spring與Web容器交互。struts.locale:Thedefaul

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論