版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、一:項(xiàng)目第一天(系統(tǒng)框架)1:項(xiàng)目介紹* 參照【文檔】中的【項(xiàng)目介紹】2:項(xiàng)目框架搭建創(chuàng)建數(shù)據(jù)庫(kù)1115elec,創(chuàng)建表:(1)持久層1:在 cn.elec.domian 中創(chuàng)建一個(gè) javabean 和對(duì)應(yīng)的文件ElecText.java:package cn.elec.;import java.util.Date; SuppressWarnings(serial)public claecText implements java.io.Serializable private String textID;/測(cè)試ID private String textName; /測(cè)試名稱(chēng) private
2、 Date textDate;/測(cè)試日期 private String textRemark; /測(cè)試備注public String getTextID() return textID;public void setTextID(String textID) this.textID = textID;public String getTextName() #測(cè)試表CREATE TABLE Elec_Text(textID VARCHAR(50) NOT NULL PRIMARY KEY,textName VARCHAR(50), textDate DATETIME, textRemark VA
3、RCHAR(500)2:在同級(jí)目錄下創(chuàng)建 ElecText.hbm.xml3:在類(lèi)路徑下,創(chuàng)建 hibernate.cfg.xmlreturn textName;public void setTextName(String textName) this.textName = textName;public Date getTextDate() return textDate;public void setTextDate(Date textDate) this.textDate = textDate;public String getTextRemark() return textRemark
4、;public void setTextRemark(String textRemark) this.textRemark = textRemark;4:在 junit 包下,使用 TestHiernate 進(jìn)試,同時(shí)導(dǎo)入一個(gè) log4j 日志的文件public class TestHibernate /*保存*/ Testpublic void save()Configuration configuration = new Configuration();/默認(rèn)加載類(lèi)路徑下的hibernate.cfg.xml,同時(shí)加載文件configuration.configure();SesFactor
5、y sf = configuration.buildSesFactory(); Sess = sf.openSes();Tranion tr = s.begranion();ElecTexecText = new ElecText(); elecText.setTextName(測(cè)試Hibernate名稱(chēng)); elecText.setTextDate(new Date(); elecText.setTextRemark(測(cè)試Hibernate備注); s.save(elecText);mit();s.close();com.jdbc.Driverjdbc:/localhost:3306/111
6、5elec?useUnicode=true&;characterEncoding=utf8rootroot.hibernate.dialect.5Dialectupdatetrue(2)層(spring)1:在 cn.ICommon.接口中創(chuàng)建 2 個(gè)接口IElecText接口2:在 cn.Common.impl 中創(chuàng)建 2 個(gè)接口的實(shí)現(xiàn)類(lèi)Implpublic class CommonImpl extends HibernateSupport implements ICommon /*spring容器中定義*/Resource(name=sesFactory)public final void
7、 setSesFactoryDi(SesFactory sesFactory)this.setSesFactory(sesFactory);/*保存*/public void save(T entity) this.getHibernateTemplate().save(entity);publicerface IElecTextextends ICommon public sic final String SERVICE_NAME = cn.elec.impl.ElecTextImpl;publicerface ICommon void save(T entity);ElecTextImpl
8、 類(lèi)3:在 src 下創(chuàng)建 spring 的容器(beans.xml)1:注解的方式,引入組件的自動(dòng)掃描,在類(lèi)和方法上可以添加對(duì)注解的支持 -!-.elec/Factoryclasspath:hibernate.cfg.xml/*相當(dāng)于spring容器中定義:*/Reitory(IElecText.SERVICE_NAME)public claecTextImpl extends CommonImpl implementsIElecText4:使用 junit 包下的 Test進(jìn)試public class Test/*保存*/ Testpublic void save() Applicatio
9、nContext ac = newClassPathXmlApplicationContext(beans.xml); IElecTextelecText=(IElecText)ac.getBean(IElecText.SERVICE_NAME);!- 5:XML,配置文件的寫(xiě)法,管理事務(wù)-結(jié)論:在層要對(duì)公用方法進(jìn)行封裝,好處在于有些方法不需要在每個(gè)中都體現(xiàn),Impl 中。這樣開(kāi)發(fā)麻煩,代碼重復(fù)性高,解決方案:將公用的方法封裝到 Common(3)業(yè)務(wù)層1:在 cn.service 包創(chuàng)建接口2:在 cn.service.impl 包創(chuàng)建接口的實(shí)現(xiàn)類(lèi)3:使用 junit 測(cè)試public cl
10、ass TestService /*保存*/ Testpublic void save()Service(IElecTextServiERVICE_NAME)Tranional(readOnly=true)public claecTextServiceImpl implements IElecTextService Resource(name=IElecText.SERVICE_NAME)private IElecTextelecText;/*保存*/Tranional(isolation=Isolation.DEFAULT,propagation=Propagatio n.REQUIRED,
11、readOnly=false)public void save(ElecTexecText) elecText.save(elecText);publicerface IElecTextService public sic final String SERVICE_NAME =cn.elec.service.impl.ElecTextServiceImpl;public void save(ElecTexecText);ElecTex ecText = new ElecText(); elecText.setTextName(測(cè)試名稱(chēng)); elecText.setTextDate(new Da
12、te(); elecText.setTextRemark(測(cè)試備注); elecText.save(elecText);結(jié)論:使用式事務(wù)處理(aop 編程的實(shí)現(xiàn)),控制業(yè)務(wù)層的代碼,相當(dāng)于在代碼業(yè)務(wù)層方法之前產(chǎn)生一個(gè)對(duì)象,在對(duì)象中完成事務(wù)的操作。(4)控制層1:在 cn.elec.web.action 中創(chuàng)建 2 個(gè) Action 類(lèi)ElecTextAction 類(lèi)父類(lèi) BaseAction 類(lèi)public class BaseAction extendionSupport implementsMDriven,ServletRequestAware,ServletResponseAware p
13、rotected HttpServletRequest request;SuppressWarnings(serial) Controller(elecTextAction) Scope(value=prototype)public claecTextAction extends BaseAction private ElecTexecText = this.getM(); Resource(name=IElecTextServiERVICE_NAME)private IElecTextService elecTextService;/*保存*/public String save() ele
14、cTextServiave(elecText); return save;ApplicationContext ac = newClassPathXmlApplicationContext(beans.xml); IElecTextService elecTextService =(IElecTextService)ac.getBean(IElecTextServiERVICE_NAME); ElecTexecText = new ElecText(); elecText.setTextName(測(cè)試Service名稱(chēng)); elecText.setTextDate(new Date(); el
15、ecText.setTextRemark(測(cè)試Service備注); elecTextServiave(elecText);結(jié)論:1:將 request 和 response 和模型驅(qū)動(dòng)的對(duì)象2:泛型轉(zhuǎn)換放在 BaseAction 中封裝2:在 cn.elec.util 包下創(chuàng)建泛型轉(zhuǎn)換類(lèi)的公用方法 Utilspublic class GenericTypeUtils /*泛型轉(zhuǎn)換*/public sic Class getGenericSuperClass(Class entity) /泛型轉(zhuǎn)換,目的是將對(duì)應(yīng)的泛型,轉(zhuǎn)化成真實(shí)的對(duì)象類(lèi)型/此時(shí)type表示:BaseAction Paramet
16、erizedType type =(ParameterizedType)entity.getGenericSuperclass();.elec.ElecTextClass entityClass = (Class) type.getActualTypeArguments()0;return entityClass;protected HttpServletResponse response;private T entity;public BaseAction()/泛型轉(zhuǎn)換Class entityClass = GenericTypeUtils.getGenericSuperClass(this
17、.getClass();try entity = (T) entityClaewInstance(); catch (Exception e) e.prStackTrace();public T getM() return entity;public void setServletRequest(HttpServletRequest req) this.request = req;public void setServletResponse(HttpServletResponse res) this.response = res;3:在類(lèi)路徑下創(chuàng)建 struts.xml4:在 web.xml
18、中定義:contextConfigLocationclasspath:beans.xml.springframework.web.context.ContextLoaderList enerstruts2.apache.struts2.dispatcher.ng.filter.StrutsPrepa reAndExecuteFilter/system/textAdd.jsp5:導(dǎo)入頁(yè)面的原型,使用 system 下 textAdd.jsp 進(jìn)試3:底層方法的封裝新增、修改、查詢(使用 ID)、刪除(使用 id 進(jìn)行刪除、使用集合刪除集合中所有對(duì)象)、查詢(指定條件查詢)在 CommonImpl
19、 中定義底層方法的封裝,在項(xiàng)目中每個(gè)中都可以使用定義的方法public class CommonImpl extends HibernateSupport implementsICommon Class entityClass =GenericTypeUtils.getGenericSuperClass(this.getClass();/*spring容器中定義Factory*/ Resource(name=ses public final void setSesFactory)FactoryDi(SesFactory sesFactory)this.setSesFactory(sesFact
20、ory);/*保存*/public void save(T entity) this.getHibernateTemplate().save(entity);/*更新*/public void update(T entity) this.getHibernateTemplate().update(entity);/*使用主鍵ID查詢對(duì)象*/struts2/*public T findObjectByID(Serializable id) return (T) this.getHibernateTemplate().get(entityClass, id);/*刪除(使用1個(gè)主鍵ID和多個(gè)主鍵I
21、D的數(shù)組)*/public void deleteBojectByIDs(Serializable. ids) if(ids!=null & ids.length0)for(Serializable id:ids)Object entity = this.findObjectByID(id); this.getHibernateTemplate().delete(entity);/*刪除(將對(duì)象封裝成集合,使用集合刪除集合中存放的所有對(duì)象)*/*用法:將數(shù)據(jù)查詢獲取封裝到List中,刪除全部的list,先查詢?cè)賱h除*/public void deleteObjectByCollection(L
22、ist list) this.getHibernateTemplate().deleteAll(list);/*指定頁(yè)面?zhèn)鬟f的查詢條件,查詢對(duì)應(yīng)的結(jié)果集信息,返回LisecText,不分頁(yè)*/*SELECT * FROM elec_text o WHERE 1=1#層 AND o.textName LIKE %張%#Service層 AND o.textRemark LIKE %張%#Service層ORDER BY o.textDate ASC,o.textRemark DESC #Service層*/public List findCollectionByConditionNoPage(S
23、tring condition,final Object params, Map orderby) String hql = select o from +entityClass.getSimpleName()+ o where 1=1 ;/map集合,獲取排序的語(yǔ)句String orderbyhql = this.orderby(orderby);final String finalHql = hql + condition + orderbyhql;/方式一/List list = this.getHibernateTemplate().find(finalHql, params);/方式
24、二,使用hibernate模板提供的回調(diào)函數(shù),回調(diào)SesList list = this.getHibernateTemplate().execute(newHibernateCallback() public ObjectnHibernate(Sesses)throws HibernateException, SQLException Query query = ses.createQuery(finalHql);if(params!=null & params.length0)for(i=0;iparams.length;i+)query.setParameter(i, paramsi);
25、return query.list(););return list;/map集合,獲取排序的語(yǔ)句,ORDER BY o.textDate ASC,o.textRemark DESCprivate String orderby(Map orderby) StringBuffer buffer = new StringBuffer(); if(orderby!=null & orderby.size()0)buffer.append( order by );for(Mntry map:orderby.entrySet()buffer.append(map.getKey()+ +map.getVal
26、ue()+,);/刪除最后一個(gè)逗號(hào) buffer.deleteCharAt(buffer.length()-1);return buffer.toString();4:項(xiàng)目用整合 svnSvn 版本控制,管理項(xiàng)目中的源碼,文檔,管理每個(gè)人開(kāi)發(fā)的代碼項(xiàng)目使用 svn 的部署* 參數(shù)【技術(shù)資料】中 svn 的文件夾中的svn.doc5:項(xiàng)目開(kāi)發(fā)可以在 myeclipse 中開(kāi)發(fā),也可以在開(kāi)發(fā)eclipse不同之處:1:Myeclipse,Eclipse 不2:Myeclipse 是 Eclipse 的一個(gè)插件,也就是說(shuō) Eclipse 沒(méi)有任何插件,需要人工導(dǎo)入3:使用 Myeclipse 發(fā)布項(xiàng)
27、目,是發(fā)布到外部的 tomcat 下的 webapp 的目錄中Eclipse 是將Tomcat 服務(wù)器整合到Eclipse 開(kāi)發(fā)4:myeclipse 是將 class 文件放置到D:workspaceProject1115elecWebRootWEB-INFclassesEclipse 是將 class 文件放置到D:workspaceEclipse1115ElecEclipsebuildclasses5:myeclipse 放置 jsp 文件的文件夾默認(rèn)叫做:WebRootEclipse 放置 jsp 文件的文件夾默認(rèn)叫做:WebContent6:項(xiàng)目編碼規(guī)范項(xiàng)目開(kāi)發(fā)前,開(kāi)發(fā)見(jiàn):【文檔】,
28、國(guó)家電力檢測(cè)中心項(xiàng)目和設(shè)備資源管理系統(tǒng)開(kāi)發(fā)規(guī)范.doc作用:項(xiàng)目中每個(gè)成員的開(kāi)發(fā),保證項(xiàng)目每個(gè)模塊相當(dāng)于是 1 個(gè)人開(kāi)發(fā)是一樣的二:項(xiàng)目第二天(運(yùn)行)1:系統(tǒng)登錄+首頁(yè)顯示(1)index.jsp(2)登錄頁(yè)面:包下的 index.jsp提供登錄名和(3)系統(tǒng)登錄首頁(yè) home.jspFRAME name=topFramesrc=$pageContext.reqontextPath /title.jsp noResize(4)菜單 left.jspLeft.jspTree.jsvar= setting: isSimpleData: true, treeNodeKey: mid, treeNod
29、eParentKey: , showLine: true,root: isRoot: true, nodes: ,loadTree:function()$(#Tree).zTree(.setting, privilegeDate);scrolling=noDate.jsprivilegeDate = mid: aa,: 0,isParent: true,icon:./images/Icon/jishusheshiweihuguanli.gif,/open:true,name: 技術(shù)設(shè)施管理, nodes:mid:ab,:aa, isParent:false,:mainFrame, url:./
30、equapment/equapmentIndex.jsp, icon:./images/Icon/yiqishebeiguanli.gif, name:儀器設(shè)備管理,mid:ac,:aa, isParent:false,:mainFrame, url:./equapment/adjustIndex.jsp, icon:./images/Icon/shebeijiaozjianxiu.gif, name:設(shè)備校準(zhǔn)檢修,mid:ad,:aa, isParent:false,:mainFrame, url:./equapment/planIndex.jsp, icon:./images/Icon/s
31、hebeigouzhijihua.gif, name:設(shè)備購(gòu)置計(jì)劃,$().ready(function().loadTree(););(5)Change.jsp框架改變(6)loading.jsp系統(tǒng)首頁(yè) functionshiftwindow()if(parent.geementById(main).cols=153,1%,*)parent.geementById(main).cols=0,1%,99%;.all.image.src=$pageContext.reqontextPath /images/you.gif;else if(parent.geementById(main).col
32、s=0,1%,99%)parent.geementById(main).cols=153,1%,*;.all.image.src=$pageContext.reqontextPath /images/zuo.gif;改變 iframe 的寬度f(wàn)unctionshiftiframe(value)if(value=1)if(.all.sion.width=500).all.sion.width=1100;.geementById(devtd).style.display=none;else if(.all.sion.width=1100).all.sion.width=500;.geementBy
33、Id(devtd).style.display=;站點(diǎn)運(yùn)行情況設(shè)備運(yùn)行情況每隔 10 分鐘刷新頁(yè)面,保證站點(diǎn)運(yùn)行情況和設(shè)備運(yùn)行情況的實(shí)時(shí)性2:運(yùn)行(1)首頁(yè) td 內(nèi)容顯示(js)如果當(dāng)顯示的表格中的 td 中的內(nèi)容不能將全部的文本顯示出來(lái),可以使用一個(gè)div,使用div 顯示所有的內(nèi)容,當(dāng)鼠標(biāo)移動(dòng)到 td 中的時(shí)候,顯示 div 中的內(nèi)容,當(dāng)鼠標(biāo)移除 td 的時(shí)候,將 div 再次隱藏出來(lái)1:jsp 頁(yè)面/*添加10分鐘后自動(dòng)刷新頁(yè)面,站點(diǎn)和設(shè)備運(yùn)行的實(shí)時(shí)性*/ window.onload=function()setTimeout(refresh10(),1000*60*10) ;funct
34、ion refresh10() window.location.reload();elseif(.all.dev.width=500).all.dev.width=1100;.geementById(siontd).style.display=none;else if(.all.dev.width=1100).all.dev.width=500;.geementById(siontd).style.display=;2:在 jsp 頁(yè)面中定義:3:在 jsp 頁(yè)面中定義使用一個(gè) div 做鼠標(biāo)移動(dòng),div 中顯示 td 中需要顯示的內(nèi)容(2)防止文本域中輸入的值,超出數(shù)據(jù)庫(kù)表的最大限制1:引入
35、 js2:在頁(yè)面中定義3:在頁(yè)面中s:textarea name=sionRun id=sionRun cssStyle=width: 500px; height: 160px; padding:1;FONT-FAMILY:宋體;FONT-SIZE:9ptfunction checkTextAreaLen()var sionRun = new Bs_LimitedTextarea(sionRun, 2500);sionRlineCssStyle = font-family:arial; font-size:11px; colray; sionRun.draw();var devRun = ne
36、w Bs_LimitedTextarea(devRun, 2500); devRlineCssStyle = font-family:arial; font-size:11px; colray; devRun.draw();window.onload=function() checkTextAreaLen();,放置到任意位置onkeydown=if(event.keyCode=13)addEnter(sionRun);(3)進(jìn)度條需求:1:大批量數(shù)據(jù)執(zhí)行保存、更新、刪除,可以添加進(jìn)度條2:文件的上傳和,可以添加進(jìn)度條3:文件到導(dǎo)入和導(dǎo)出,可以添加進(jìn)度條4:在進(jìn)行數(shù)據(jù)的時(shí)候,可以添加進(jìn)度條見(jiàn)【
37、技術(shù)資料】,進(jìn)度條.doc(4)CKEditor+CKFinder 組合文本編輯器需求:1:在使用“通知”和“公告”的系統(tǒng)中2:在“”系統(tǒng)中,添加文本編輯器整合系統(tǒng)詳見(jiàn):【技術(shù)資料】,F(xiàn)CK 文本編輯器合項(xiàng)目開(kāi)發(fā).doc版本ckeditor 配置資料,CKEditor_CKFinder_整擴(kuò)展(問(wèn)題)擴(kuò)展:由于項(xiàng)目中使用文本編輯器很有可能在開(kāi)發(fā)的時(shí)候,在保存數(shù)據(jù)的時(shí)候,超出數(shù)據(jù)庫(kù)支持的字段的最大值?如何解決呢解決方案:(5)彈出窗口 Js:window.open(); Js:windex.close();a.jsp 中使用window.open();,此時(shí)彈出b.jsp在 b.jsp 中可以使
38、用 opener 屬性,調(diào)用a.jsp 的內(nèi)容類(lèi)似于:使用 frameset 的時(shí)候,在子頁(yè)面中調(diào)用 parent,用來(lái)調(diào)用父頁(yè)面的數(shù)據(jù)三:項(xiàng)目第三天(數(shù)據(jù)字典)1:遍歷 select如果遍歷的集合是之前數(shù)據(jù)庫(kù)設(shè)計(jì)主鍵 ID站點(diǎn)運(yùn)行情況設(shè)備運(yùn)行情況創(chuàng)建日期現(xiàn)在數(shù)據(jù)庫(kù)設(shè)計(jì)運(yùn)行表主鍵 ID站點(diǎn)運(yùn)行情況設(shè)備運(yùn)行情況創(chuàng)建日期1122013-11-17 14:39:00運(yùn)行數(shù)據(jù)表主鍵 ID站點(diǎn)運(yùn)行/設(shè)備運(yùn)行的標(biāo)識(shí)數(shù)據(jù)內(nèi)容數(shù)據(jù)顯示排序11X11YYYYYYY22AAAAAAA12BBBBBBB2注意:數(shù)據(jù)內(nèi)容在保存的時(shí)候,先將收內(nèi)容進(jìn)行分割,按照 2500 個(gè)字符進(jìn)行分割,分割數(shù)組的形式進(jìn)行保存查詢的時(shí)候
39、,查詢運(yùn)行表,使用站點(diǎn)運(yùn)行情況的 1,查詢運(yùn)行數(shù)據(jù)表,將查詢獲取的數(shù)據(jù)內(nèi)容組織成 1 個(gè)新的字符串,將新的字符串顯示XYYYYYYYY頁(yè)面遍歷下拉菜單:在使用 hql 語(yǔ)句或者 sql 語(yǔ)句查詢數(shù)據(jù)庫(kù)的時(shí)候,如果投影查詢是一個(gè)對(duì)象將返回一個(gè)Object 對(duì)象的值例如:SELECT DISTINCT o.keyword FROM elec_systemddl o在使用 hql 語(yǔ)句或者 sql 語(yǔ)句查詢數(shù)據(jù)庫(kù)的時(shí)候,如果投影查詢是多個(gè)對(duì)象將返回一個(gè)Object 對(duì)象數(shù)組例如:SELECT DISTINCT o.keyword,o.ddlName FROM elec_systemddl o優(yōu)化 h
40、ql 語(yǔ)句優(yōu)化前:優(yōu)化后:對(duì)于 hql 語(yǔ)句來(lái)說(shuō),可以將投影查詢的字段封裝到一個(gè) javabean 中,前提是 javabena 中必須存在一個(gè)構(gòu)造方法,用來(lái)存放對(duì)應(yīng)的屬性值2:在編輯數(shù)據(jù)字典的時(shí)候,使用ajax(封裝 pub.js)調(diào)用方式(1)在 dictionaryIndex.jsp 中定義:/結(jié)果集LisecSystemDDL sysList = new ArrayLisecSystemDDL(); String hql = SELECT DISTINCT o.keyword FROM ElecSystemDDL o; List list = this.getHibernateTemp
41、late().find(hql);/遍歷if(list!=null & list.size()0)for(Object o:list)ElecSystemDDL elecSystemDDL = new ElecSystemDDL(); elecSystemDDL.setKeyword(o.toString(); sysList.add(elecSystemDDL);return sysList;LisecSystemDDL list = elecSystemDDLService.findDistinctKeywod();request.setribute(list, list);(2)pub.
42、js 的定義:Ajax 引擎:/*創(chuàng)建ajax引擎對(duì)象*/Pub.newXMLHttpRequest=function newXMLHttpRequest() var xmlreq = false;if (window.XMLHttpRequest) xmlreq = new XMLHttpRequest(); else if (window.ActiveXObject) try /*domId:表單Form2的名稱(chēng)action:URL地址sForm:表單Form1的名稱(chēng)*/ Pub.submitActionWithForm=function(domId,action,sForm)/*dom對(duì)
43、象ajax* 第一步:創(chuàng)建ajax引擎,即XMLHttpRequest*/var req = Pub.newXMLHttpRequest();/*第二步:使用ajax引擎調(diào)用onreadysechange,表示事件處理函數(shù),用來(lái)服務(wù)器端(Action)與客戶端(瀏覽器)之間的連接狀態(tài)*/var handlerFunction = Pub.getReadySeHandler(req, domId,Pub.handleResponse);req.onreadysechange = handlerFunction;/*第三步:使用ajax引擎調(diào)用open方法,打開(kāi)接(此時(shí)與服務(wù)器連接)*/req.o
44、pen(T, action, true);/如果請(qǐng)求的方式是T的話,需要添加請(qǐng)求的頭,此時(shí)可以使用req.send(str);方式發(fā)送數(shù)據(jù),如果不添加此行代碼send方法將無(wú)法傳遞參數(shù)到服務(wù)器req.setRequestHeader(Content-Type, application/x-www-form-urlencoded);/*第四步:使用ajax引擎調(diào)用send方法,向服務(wù)器發(fā)送數(shù)據(jù)(發(fā)送表單Form1中所有的元素組織參數(shù)進(jìn)行傳遞)*/var str = Pub.getParams2Str(sForm); req.send(str);/傳遞的數(shù)據(jù)格式a=8&b=9引入一個(gè) js在 js
45、 的方法中定義Pub.submitActionWithForm(Form2,$pageContext.reqontextPath /system/elecSyste mDDLAction_edit.do,Form1);Pub.getReadySeHandler 事件處理函數(shù)的方法/*傳遞的參數(shù)req, domId,Pub.handleResponseparam req:ajax引擎對(duì)象param eleid:表單Form2的名稱(chēng)param responseXmlHandler,表示Pub.handleResponse函數(shù)returns Function*/Pub.getReadySeHandl
46、er =function getReadySeHandler(req, eleid,responseXmlHandler) return function () /*1表示open方法調(diào)用,send方法沒(méi)有調(diào)用2表示open方法調(diào)用,send方法也被調(diào)用3表示服務(wù)器正在接收信息和響應(yīng)數(shù)據(jù)4表示連接成功,只有4才能獲取服務(wù)器返回給客戶端的值*/if (req.readySe = 4) /* 200服務(wù)器響應(yīng)沒(méi)有異常,只有200才能獲取服務(wù)器返回給客戶端的值*/if (req.sus = 200) /* 服務(wù)器響應(yīng)客戶端的值:存放到2個(gè)對(duì)象中1:req.responseText(包括文本、字符串、
47、json數(shù)據(jù))2:req.responseXML(包括XML數(shù)據(jù)格式:例如),頁(yè)面中使用.geementByTagName(name)*/xmlreq = new ActiveXObject(Msxml2.XMLHTTP); catch (e1) try xmlreq = new ActiveXObject(.XMLHTTP); catch (e2) alert(e2);return xmlreq;Pub.getParams2Str(sForm);組織表單 Form1 的參數(shù)/*sForm:表單Form1的名稱(chēng)返回值:strDiv的數(shù)據(jù)格式是,a=8&b=9*/Pub.getParams2St
48、r=function getParams2Str(sForm)var strDiv=;try var objForm=.formssForm;if (!objForm)return strDiv;var elt,sName,sValue;for (var fld = 0; fld objForm.elements.length; fld+) elt = objForm.elementsfld;sName=; sValue=+elt.value; if(fld=objForm.elements.length-1)strDiv=strDiv + sName+=+sValue+;elsestrDiv
49、=strDiv + sName+=+sValue+&;catch (ex) return strDiv;return strDiv;responseXmlHandler(req.responseTexeid); else alert(HTTP error: +req.sus);return false;總結(jié):效果:在 dictionIndex.jsp 中存在 2 個(gè)表單,1 個(gè)表單 Form1,1 個(gè)是表單 Form2通過(guò) ajax,調(diào)用服務(wù)器,發(fā)送表單 Form1 中的元素作為傳遞給服務(wù)器的參數(shù),在服務(wù)器進(jìn)行處理,將處理后的結(jié)果,放置 dictionaryEdit.jsp 中將 dictio
50、naryEdit.jsp 的所有內(nèi)容,顯示在 dictionIndex.jsp 中的 Form2 中感覺(jué):異步效果,F(xiàn)orm1 不動(dòng),F(xiàn)orm2 針對(duì) Form1 的選擇,顯示對(duì)應(yīng)的數(shù)據(jù)3:js 的 DOM 對(duì)象去掉空格方法function LTrim(str)var i;for(i=0;i=0;i-)if(str.charAt(i)!= &str.charAt(i)!=?)break;str=str.substring(0,i+1);return str;function Trim(str)return LTrim(RTrim(str);4:webservice技術(shù)(axis2):為什么項(xiàng)目
51、中使用webservice,由于要完成數(shù)據(jù)字典(元數(shù)據(jù))在整個(gè)電力系使用 webservice 技術(shù)調(diào)用。統(tǒng)完成數(shù)據(jù)的一致性,只需要總部提供所有的元數(shù)據(jù),有怎么使用webservice(axis2)呢見(jiàn)【技術(shù)資料】中的【webservice技術(shù)】面試需要注意的地方:webservice 作用,實(shí)現(xiàn)了 2 個(gè)不同的系統(tǒng)之間的數(shù)據(jù)調(diào)用,是用來(lái)連接多個(gè)系統(tǒng)之間的橋梁服務(wù)端提供一個(gè)方法,發(fā)布一個(gè)服務(wù)客戶端組織查詢參數(shù),調(diào)用這個(gè)服務(wù)使用axis注意:不要在客戶端的代碼中頻繁調(diào)用服務(wù)的方法,只需要在 web 容器啟動(dòng)(過(guò)濾器、 Servlet)的時(shí)候,通過(guò)過(guò)濾器或者 Servlet發(fā)布的服務(wù),查詢所有數(shù)據(jù)
52、類(lèi)型對(duì)應(yīng)的值,查詢完成之后可以放置到Sessoin 中,Ses中存放 Map頁(yè)面的時(shí)候,從Ses 中獲取對(duì)應(yīng)的值即可。5:使用 ajax 完成進(jìn)度條的百分比見(jiàn)【技術(shù)資料】【進(jìn)度條進(jìn)度條(百分比)】分析步驟:map 集合的 key 表示數(shù)據(jù)類(lèi)型(),map 集合的 value 表示數(shù)據(jù)項(xiàng)的值(男,女),每次面試時(shí)總結(jié)使用 ajax,在表單提交的時(shí)候,執(zhí)行多線程進(jìn)行操作* 一個(gè)線程表單提交的方法 save()方法,使用 Ses存放保存時(shí)計(jì)算的百分比,如果線程結(jié)束的時(shí)候,將Ses對(duì)象清空。* 另一個(gè)線程由ajax 開(kāi)啟,如果計(jì)算的百分比不是 100 的話,那么就每隔 1 秒中調(diào)用ajax定義的方法,
53、如果是 100 的話說(shuō)明線程結(jié)束* ajax 定義的方法,就是從 Ses中獲取對(duì)應(yīng)的百分比對(duì)象,放置 XML 屬性值,將該值傳遞個(gè)頁(yè)面,在頁(yè)面中顯示對(duì)應(yīng)的百分比信息,百分比進(jìn)度條的效果就是改變對(duì)應(yīng) td 的寬度(將百分比的值放置到寬度的對(duì)象中)四:項(xiàng)目第四天(用戶管理)1:ajax 實(shí)現(xiàn)二級(jí)聯(lián)動(dòng)分析:導(dǎo)入 struts2 支持 json 的 jar 包struts2-json-plugin-2.3.3.jarstruts.xml 文件定義:(3)在 Action 類(lèi)中定義:(4)頁(yè)面顯示二級(jí)聯(lián)動(dòng)的 js/ajax的二級(jí)聯(lián)動(dòng),使用選擇的所屬,查詢?cè)撍鶎傧聦?duì)應(yīng)的名稱(chēng)列表function findJ
54、ctUnit(o)/貨物所屬的文本內(nèi)容var jct = $(o).find(option:selected).text();/*$.t:表示t請(qǐng)求參數(shù)一:發(fā)送請(qǐng)求的地址參數(shù)二:發(fā)送數(shù)據(jù),json數(shù)據(jù)格式public String findJctUnit()/將數(shù)據(jù)字典的值轉(zhuǎn)換成json數(shù)據(jù)/1:使用jquery的ajax獲取到所屬的中文名稱(chēng)()String keyword = elecUser.getJctID();/2:以選擇的數(shù)據(jù)類(lèi)型作為條件,查詢對(duì)應(yīng)數(shù)據(jù)類(lèi)型的集合,返回 LisecSystemDDLLisecSystemDDL list = elecSystemDDLService.f
55、indElecSystemDDLListByKeyword(keyword);/3:將list放置到棧頂,將list使用struts2的方式轉(zhuǎn)換成json數(shù)據(jù)ValueStackUtils.setValueStack(list);return findJctUnit;d+.ddlCode,d+.ddlName同時(shí)頁(yè)面上存在 2 個(gè) select2:ajax 完成登錄名的校驗(yàn)分析:* 參數(shù)三:function(daextSus):回調(diào)函數(shù),data表示從服務(wù)器獲取的值*/$.t(elecUserAction_findJctUnit.do,jctID:jct,function(daextSus)/
56、先刪除名稱(chēng)的下拉菜單,但是請(qǐng)選擇要留下$(#jctUnitID option).remove(); if(data!=null & data.length0)for(var i=0;idata.length;i+)var ddlCode = datai.ddlCode; var ddlName = datai.ddlName;/添加到名稱(chēng)的下拉菜單中var $option = $();$option.attr(value,ddlCode);$option.text(ddlName);$(#jctUnitID).append($option););1:在 jsp 頁(yè)面中定義:同時(shí)下面 jsp 中
57、添加校驗(yàn)的文本框(2)在 struts.xml 文件的配置字符串形式傳遞值,在模型驅(qū)動(dòng)的對(duì)象中,添加 message 屬性ElecUser.javaprivate String message; set 和 get 方法在 Action 中定義:/*Name: checkUserDescription: 使用登錄名作為條件,查詢登錄名在數(shù)據(jù)庫(kù)中是否出現(xiàn)重復(fù)message/*校驗(yàn)登錄名是否出現(xiàn)重復(fù)*/ function checkUser(o)/alert(o.value);/dom的寫(xiě)法/alert($(o).val();/jquery的寫(xiě)法 var logonName = $(o).val(
58、);/以登錄名作為查詢條件,查詢?cè)摰卿浢欠裨跀?shù)據(jù)庫(kù)表中存在$.t(elecUserAction_checkUser.do,logonName:logonName,function(data) if(data=1)$(#check).html(登錄名不能為空);o.focus();$(#BT_Submit).attr(disabled,none);else if(data=2)$(#check).html(登錄名已經(jīng)存在); o.focus();$(#BT_Submit).attr(disabled,none);else$(#check).html(登錄名可以使用);$(#BT_Submit)
59、.attr(disabled,););3:在校驗(yàn) jsp 輸入的值是否正確(正則表達(dá)式)學(xué)會(huì)語(yǔ)法:真用到的時(shí)候,借助于老師4:學(xué)會(huì)使用 md5加密場(chǎng)景:針對(duì)用戶的新增保存和修改保存引入 md5keybean,放置到 utils 包下使用 md5keybeanpublic sic void main(String args) MD5keyBean m = new MD5keyBean();function checkPhone(strNumber)var pattern =/(0-93,4-0-93,8$)|(0-93,8$)|(0-93,4)0-93,8$)|(00,1130-99$)/;if
60、(pattern.test(strNumber)return true; return false;String message = ;message=1:表示登錄名不能為空message=2:表示登錄名在數(shù)據(jù)庫(kù)中已經(jīng)存在,此時(shí)不能保存message=3:表示登錄名在數(shù)據(jù)庫(kù)表不存在,此時(shí)可以保存Author:(作者)* Ver: V1.00 (版本號(hào))Create Date: 2013-11-19(創(chuàng)建日期)Parameters: 無(wú)Return: ajax,使用struts的ajax轉(zhuǎn)發(fā)*/public String checkUser()/獲取登錄名String logonName = e
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024高考?xì)v史一輪復(fù)習(xí)第1講中國(guó)早期政治制度的特點(diǎn)及走向“大一統(tǒng)”的秦漢政治學(xué)案含解析人民版
- 2024高考地理一輪復(fù)習(xí)第二十二單元環(huán)境保護(hù)考法精練含解析
- 小學(xué)一年級(jí)數(shù)學(xué)教學(xué)計(jì)劃
- 拖欠工資起訴書(shū)范文5篇
- 二零二五年環(huán)保產(chǎn)業(yè)創(chuàng)業(yè)合伙人合同3篇
- 大豆加工行業(yè)現(xiàn)狀分析報(bào)告
- 二零二五年度特色餐廳場(chǎng)地租賃經(jīng)營(yíng)合同范本2篇
- 2024年隴南市武都區(qū)第一人民醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫(kù)頻考點(diǎn)附帶答案
- 二零二五版企業(yè)股份分配與員工激勵(lì)協(xié)議3篇
- 2024年河南檢察職業(yè)學(xué)院高職單招語(yǔ)文歷年參考題庫(kù)含答案解析
- 幼兒戶外自主游戲觀察與指導(dǎo)的實(shí)踐研究課題開(kāi)題報(bào)告
- GP12控制作業(yè)指導(dǎo)書(shū)
- 集團(tuán)公司垂直管理辦法
- 《滑炒技法-尖椒炒肉絲》教學(xué)設(shè)計(jì)
- 【人生哲學(xué)與傳統(tǒng)道德4200字(論文)】
- 116個(gè)公共信息圖形通用符號(hào)
- 勞動(dòng)仲裁證據(jù)目錄清單
- DB11T 1832.11-2022建筑工程施工工藝規(guī)程 第11部分幕墻工程
- 怎樣移動(dòng)重物幻燈片
- GB/T 29529-2013泵的噪聲測(cè)量與評(píng)價(jià)方法
- GB/T 29494-2013小型垂直軸風(fēng)力發(fā)電機(jī)組
評(píng)論
0/150
提交評(píng)論