版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、js中的json對(duì)象默認(rèn)分類2021-07-1617:13:32閱讀730評(píng)論0字號(hào):大中小訂閱使用JSON進(jìn)展數(shù)據(jù)傳輸一、選擇的意義在異步應(yīng)用程序中發(fā)送和接收信息時(shí),可以選擇以純文本和XML作為數(shù)據(jù)格式。為了更好的使用ajax,我們將學(xué)習(xí)一種有用的數(shù)據(jù)格式JavaScriptObjectNotationJSON,以及如何使用它更輕松地在應(yīng)用程序中挪動(dòng)數(shù)據(jù)和對(duì)象。JSON是一種簡(jiǎn)單的數(shù)據(jù)交換格式,在某些方面,它的作用與XML非常類似,但比XML更為簡(jiǎn)單,JSON的語法簡(jiǎn)化了數(shù)據(jù)交換的難度,而且提供了一種偽對(duì)象的方式。Java的對(duì)象<->JavaScript對(duì)象(json數(shù)據(jù)格式)二
2、、JSON根底簡(jiǎn)單地說,JSON可以將JavaScript對(duì)象中表示的一組數(shù)據(jù)轉(zhuǎn)換為字符串偽對(duì)象,然后就可以在函數(shù)之間輕松地傳遞這個(gè)字符串,或者在異步應(yīng)用程序中將字符串從Web客戶端傳遞給效勞器端程序。這個(gè)字符串看起來有點(diǎn)兒古怪稍后會(huì)看到幾個(gè)例如,但是JavaScript很容易解釋它,而且JSON可以表示比名稱/值對(duì)更復(fù)雜的構(gòu)造。例如,可以表示數(shù)組和復(fù)雜的對(duì)象,而不僅僅是鍵和值的簡(jiǎn)單列表。關(guān)于JSON對(duì)象1、使用JavaScript語法創(chuàng)立對(duì)象/定義一個(gè)函數(shù),作為構(gòu)造函數(shù)fucntionperson(name,sex)=name;this.sex=sex;/創(chuàng)立一個(gè)實(shí)例var
3、p=newPerson(張三,男);/輸出Person實(shí)例alert();注意:通過該方式創(chuàng)立的對(duì)象是一般的腳本對(duì)象2、從開始創(chuàng)立對(duì)象有了一種更快捷的語法(Json的語法),如下:varobj=name:"張三","sex":'男'alert(obj.sex);關(guān)于數(shù)組1、早期的JavaScript數(shù)組vararr=newArray();arr0=a;arr1=bbc我們也可以通過如下方式創(chuàng)立數(shù)組vararr=newArray(a,bbc);2、使用JSON語法,那么可以通過如下方式創(chuàng)立數(shù)組vararr=a,bbc;簡(jiǎn)單JSO
4、N例如按照最簡(jiǎn)單的形式,可以用下面這樣的JSON表示名稱/值對(duì):"firstName":"Brett"這個(gè)例如非常根本,而且實(shí)際上比等效的純文本名稱/值對(duì)占用更多的空間:firstName=Brett但是,當(dāng)將多個(gè)名稱/值對(duì)串在一起時(shí),JSON就會(huì)表達(dá)出它的價(jià)值了。首先,可以創(chuàng)立包含多個(gè)名稱/值對(duì)的記錄,比方:"firstName":"Brett","lastName":"McLaughlin","email":"brettnewInstance
5、"從語法方面來看,這與名稱/值對(duì)相比并沒有很大的優(yōu)勢(shì),但是在這種情況下JSON更容易使用,而且可讀性更好。例如,它明確地表示以上三個(gè)值都是同一記錄的一局部;花括號(hào)使這些值有了某種聯(lián)絡(luò)。值的數(shù)組當(dāng)需要表示一組值時(shí),JSON不但可以進(jìn)步可讀性,而且可以減少復(fù)雜性。例如,假設(shè)您希望表示一個(gè)人名列表。在XML中,需要許多開始標(biāo)記和完畢標(biāo)記;假設(shè)使用典型的名稱/值對(duì)就像在本系列前面文章中看到的那種名稱/值對(duì),那么必須建立一種專有的數(shù)據(jù)格式,或者將鍵名稱修改為person1-firstName這樣的形式。假設(shè)使用JSON就只需將多個(gè)帶花括號(hào)的記錄分組在一起:"people":
6、"firstName":"Brett","lastName":"McLaughlin","email":"brettnewInstance","firstName":"Jason","lastName":"Hunter","email":"jasonservlets","firstName":"Elliotte",&q
7、uot;lastName":"Harold","email":"elharomacfaq"這不難理解。在這個(gè)例如中,只有一個(gè)名為people的變量,值是包含三個(gè)條目的數(shù)組,每個(gè)條目是一個(gè)人的記錄,其中包含名、姓和電子郵件地址。上面的例如演示如何用括號(hào)將記錄組合成一個(gè)值。當(dāng)然,可以使用一樣的語法表示多個(gè)值每個(gè)值包含多個(gè)記錄:"programmers":"firstName":"Brett","lastName":"McLaughlin&q
8、uot;,"email":"brettnewInstance","firstName":"Jason","lastName":"Hunter","email":"jasonservlets","firstName":"Elliotte","lastName":"Harold","email":"elharomacfaq"
9、;,"authors":"firstName":"Isaac","lastName":"Asimov","genre":"sciencefiction","firstName":"Tad","lastName":"Williams","genre":"fantasy","firstName":"Frank&q
10、uot;,"lastName":"Peretti","genre":"christianfiction","musicians":"firstName":"Eric","lastName":"Clapton","instrument":"guitar","firstName":"Sergei","lastName":&
11、quot;Rachmaninoff","instrument":"piano"這里最值得注意的是,可以表示多個(gè)值,每個(gè)值進(jìn)而包含多個(gè)值。但是還應(yīng)該注意,在不同的主條目programmers、authors和musicians之間,記錄中實(shí)際的名稱/值對(duì)可以不一樣。JSON是完全動(dòng)態(tài)的,允許在JSON構(gòu)造的中間改變表示數(shù)據(jù)的方式。甚至可以聲明如下的Json對(duì)象varobj2=people:name:'張三',sex:"男"alert();在處理JSON格式的數(shù)據(jù)時(shí),沒有需要遵守的
12、預(yù)定義的約束。所以,在同樣的數(shù)據(jù)構(gòu)造中,可以改變表示數(shù)據(jù)的方式,甚至可以以不同方式表示同一事物。deptid:'1',deptname:'開發(fā)部',deptnum:'2',deptdesc:'開發(fā)相關(guān),emps:empid:1,empname:'張三',sex:男',age:'20',empid:2,empnamesex:男",age:20'empid:3,empname:'張三',sex:男',age:'20'三、在JavaScript中使
13、用JSON掌握了JSON格式之后,在JavaScript中使用它就很簡(jiǎn)單了。JSON是JavaScript原生格式,這意味著在JavaScript中處理JSON數(shù)據(jù)不需要任何特殊的API或工具包。將JSON數(shù)據(jù)賦值給變量例如,可以創(chuàng)立一個(gè)新的JavaScript變量,然后將JSON格式的數(shù)據(jù)字符串直接賦值給它:varpeople="programmers":"firstName":"Brett","lastName":"McLaughlin","email":"br
14、ettnewInstance","firstName":"Jason","lastName":"Hunter","email":"jasonservlets","firstName":"Elliotte","lastName":"Harold","email":"elharomacfaq","authors":"fir
15、stName":"Isaac","lastName":"Asimov","genre":"sciencefiction","firstName":"Tad","lastName":"Williams","genre":"fantasy","firstName":"Frank","lastName":"
16、;Peretti","genre":"christianfiction","musicians":"firstName":"Eric","lastName":"Clapton","instrument":"guitar","firstName":"Sergei","lastName":"Rachmaninoff","i
17、nstrument":"piano"這非常簡(jiǎn)單;如今people包含前面看到的JSON格式的數(shù)據(jù)。但是,這還不夠,因?yàn)樵L問數(shù)據(jù)的方式似乎還不明顯。訪問數(shù)據(jù)盡管看起來不明顯,但是上面的長字符串實(shí)際上只是一個(gè)數(shù)組;將這個(gè)數(shù)組放進(jìn)JavaScript變量之后,就可以很輕松地訪問它。實(shí)際上,只需用點(diǎn)號(hào)表示法來表示數(shù)組元素。所以,要想訪問programmers列表的第一個(gè)條目的姓氏,只需在JavaScript中使用下面這樣的代碼:people變量中的數(shù)據(jù);然后挪動(dòng)grammers0.lastName;注意,數(shù)組索引是從零開始的。所以,這行代碼首先訪問到稱
18、為programmers的條目,再挪動(dòng)到第一個(gè)記錄0;最后,訪問lastName鍵的值。結(jié)果是字符串值“McLaughlin"。下面是使用同一變量的幾個(gè)例如。people.authors1.genre/Valueis"fantasy"people.musicians3.lastName/Undefined.Thisreferstothefourthentry,andthereisn'grammers2.firstName/Valueis"Elliotte"利用這樣的語法,可以處理任何JSON格式的數(shù)據(jù),而不需
19、要使用任何額外的JavaScript工具包或API。修改JSON數(shù)據(jù)正如可以用點(diǎn)號(hào)和括號(hào)訪問數(shù)據(jù),也可以按照同樣的方式輕松地修改數(shù)據(jù):people.musicians1.lastName="Rachmaninov"在將字符串轉(zhuǎn)換為JavaScriptjson格式對(duì)象之后,就可以像這樣修改變量中的數(shù)據(jù)。注意:json格式的又象和json文本是不同的varobj=name:"張三","sex":'男'/json格式的對(duì)象varstr="name:"張三","sex":
20、9;男'"/json格式的字符串json格式的文本轉(zhuǎn)換回字符串當(dāng)然,假設(shè)不能輕松地將對(duì)象轉(zhuǎn)換回本文提到的文本格式,那么所有數(shù)據(jù)修改都沒有太大的價(jià)值。在JavaScript中這種轉(zhuǎn)換也很簡(jiǎn)單:varnewJSONtext=people.toJSONString();這樣就行了!如今就獲得了一個(gè)可以在任何地方使用的文本字符串,例如,可以將它用作Ajax應(yīng)用程序中的懇求字符串。更重要的是,可以將任何JavaScript對(duì)象轉(zhuǎn)換為JSON文本。并非只能處理原來用JSON字符串賦值的變量。為了對(duì)名為myObject的對(duì)象進(jìn)展轉(zhuǎn)換,只需執(zhí)行一樣形式的命令:scripttype="
21、;text/javascript">functionCar(make,model,year,color)this.make=make;this.model=model;this.year=year;this.color=color;functionshowCar()varcarr=newCar("Dodge","CoronetR/T”,1968,"yellow");alert(carr.toJSONString();</script>這就是JSON與其他數(shù)據(jù)格式之間最大的差異。假設(shè)使用JSON,只需調(diào)用一個(gè)簡(jiǎn)單的函數(shù)
22、,就可以獲得經(jīng)過格式化的數(shù)據(jù),可以直接使用了。對(duì)于其他數(shù)據(jù)格式,需要在原始數(shù)據(jù)和格式化數(shù)據(jù)之間進(jìn)展轉(zhuǎn)換。即使使用DocumentObjectModel這樣的API提供了將自己的數(shù)據(jù)構(gòu)造轉(zhuǎn)換為文本的函數(shù),也需要學(xué)習(xí)這個(gè)API并使用API的對(duì)象,而不是使用原生的JavaScript對(duì)象和語法。最終結(jié)論是,假設(shè)要處理大量JavaScript對(duì)象,那么JSON幾乎肯定是一個(gè)好選擇,這樣就可以輕松地將數(shù)據(jù)轉(zhuǎn)換為可以在懇求中發(fā)送給效勞器端程序的格式(Ajax)。四、JSON在Ajax中的應(yīng)用JSONJavaScriptObjectNotation一種簡(jiǎn)單的數(shù)據(jù)格式,比xml更輕巧。JSON是JavaScr
23、ipt原生格式,這意味著在JavaScript中處理JSON數(shù)據(jù)不需要任何特殊的API或工具包。通過以上學(xué)習(xí)我們知道JSON的規(guī)那么很簡(jiǎn)單:對(duì)象是一個(gè)無序的“'名稱/值對(duì)集合。一個(gè)對(duì)象以“左括號(hào)開始,“右括號(hào)完畢。每個(gè)“名稱后跟一個(gè)“:冒號(hào);“名稱/值對(duì)之間使用“,逗號(hào)分隔。1、通過Json格式來聲明對(duì)象和操作對(duì)象案例:js代碼functionshowJSON()varuser="username":"andy","age":20,"info":"tel":"123456&qu
24、ot;,"cellphone":"98765","addresses":"city":"beijing","postcode":"222333","city":"newyork","postcode":"555666"alert(user.username);alert(user.age);alert(.cellphone);alert(user.addres
25、s0.city);alert(user.address0.postcode);這表示一個(gè)user對(duì)象,擁有username,age,info,address等屬性。同樣也可以用JSON來簡(jiǎn)單的修改數(shù)據(jù),修改上面的例子js代碼functionshowJSON()varuser="username":"andy","age":20,"info":"tel":"123456","cellphone":"98765","address
26、":"city":"beijing","postcode":"222333","city":"newyork","postcode":"555666"alert(user.username);alert(user.age);alert(.cellphone);alert(user.address0.city);alert(user.address0.postcode);user.username="
27、Tom"alert(user.username);2、一般對(duì)象轉(zhuǎn)換成JSON格式的字符JSON提供了包,下載:后,將其引入然后就可以簡(jiǎn)單的使用object.toJSONString()轉(zhuǎn)換成JSON數(shù)據(jù)。js代碼functionCar(make,model,year,color)this.make=make;this.model=model;this.year=year;this.color=color;functionshowCar()varcarr=newCar("Dodge","CoronetR/T",1968,"yellow&
28、quot;);alert(carr.toJSONString();2、js對(duì)象和JSON格式的js對(duì)象、JSON格式的js對(duì)象和JSON文本的轉(zhuǎn)換可以使用eval來轉(zhuǎn)換JSON字符到JSON式的Objectjs代碼functionmyEval()varstr='"name":"張三","sex":"男"'varobj=eval('('+str+')');alert(obj.toJSONString();或者使用parseJSON(方法functionmyparse()
29、varstr='"name":"張三","sex":"男"'varobj=str.parseJSON();把其Json文本解析成為json對(duì)象alert(obj.toJSONString();/把json對(duì)象轉(zhuǎn)換成JSON文本3、從Java類產(chǎn)生json對(duì)象(json-lib)Jar包:從Java類產(chǎn)生json對(duì)象要使用json-libjar包json的jar包json-lib的依賴包:commons-logging.jar作用:json-lib可以在效勞器端把java對(duì)象轉(zhuǎn)換成json對(duì)象、從js
30、on對(duì)象轉(zhuǎn)化到Java對(duì)象比方:json-lib可以將java中的Array,Collections,Object,XML轉(zhuǎn)化成json對(duì)象,反之也可以將json對(duì)象轉(zhuǎn)化成java對(duì)象.配置:需要把以及依賴都要放到工程的lib庫下常用的JSONAPI:(1) 、JSONObject/java對(duì)象或滿足一定格式的字符串("username:'admin',password:'12345',.")轉(zhuǎn)化為JSONObject對(duì)象,用法:JSONObjectjson=JSONObject.fromObject(userinfo);/從json對(duì)象中根
31、據(jù)鍵名取對(duì)應(yīng)的值,username為鍵名json.getObject("username");/json對(duì)象到j(luò)ava對(duì)象的轉(zhuǎn)化(jsonobject->po)Userinfouserinfo=(Dept)JSONObject.toBean(jsonObject,Userinfo.class);/Json對(duì)象轉(zhuǎn)化成json文本字符串StringjosStr=JSONObject.fromObject(userinfo).toString();(2) 、JSONArraybooleanboolArray=true,false;Listlist=newArrayList(
32、);Mapmap=newHashMap();bjecttest=newUserinfo(),newUserinfo();/轉(zhuǎn)化為java的數(shù)組Array為json對(duì)象JSONArrayjsonArray=JSONArray.fromObject(boolArray);/System.out.println(jsonArray.toString();JSONArrayjsonArray1=JSONArray.fromObject("'1','2','3'");/System.out.println(jsonArray1.toSt
33、ring();list.add("first");list.add("second");list.add(newUserinfo();/轉(zhuǎn)換java的List為json對(duì)象JSONArrayjsonList=JSONArray.fromObject(list);System.out.println(jsonList);/轉(zhuǎn)換java的Map為json對(duì)象map.put("name","windfree");map.put("bool",Boolean.TRUE);map.put("in
34、t",newInteger(0);map.put("arr",newString"a","b");map.put("func","function(i)returnthis.arri;");map.put("bean",test);JSONObjectjsonMap=JSONObject.fromObject(map);/System.out.println(jsonMap);考慮:什么時(shí)候在客戶端及效勞器端使用json格式的數(shù)據(jù)4、下面使用prototype寫一個(gè)
35、JSON的ajax例子案例:在頁面中寫一個(gè)ajax的懇求js代碼:functionsendRequest()varurl="/WLLTWebApp/JsonTestServlet"varmailAjax=newAjax.Request(url,method:'get',onComplete:jsonResponse);functionjsonResponse(originalRequest)alert(originalRequest.responseText);varmyobj=originalRequest.responseText.parseJSON()
36、;alert();效勞器端代碼:先寫一個(gè)servlet,java代碼packageorg.wllt.actions;importjava.io.IOException;importjava.io.PrintWriter;importjavax.servlet.ServletException;importjavax.servlet.Servlet;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importnet.sf.json.JSONObject;importnet.sf.js
37、on.JsonConfig;importorg.wllt.beans.Userinfo;publicclassJsonTestServletextendsServletpublicJsonTestServlet()publicvoiddoGet(ServletRequestrequest,ServletResponseresponse)throwsServletException,IOExceptionresponse.setContentType("text/html;charset=GBK");System.out.println(request.getParamete
38、r("someParameter");PrintWriterout=response.getWriter();(1)使用JSONAP包中JSONObject的fromObject方法把Java對(duì)象轉(zhuǎn)換成JSon對(duì)象/Userinfoinfo=newUserinfo("admin","123456");/JSONObjectobj=JSONObject.fromObject(info);/out.println(obj);/(2)或者使用out.print(""username":"張三"
39、;,"password":"123"");out.println("將來藍(lán)圖歡迎你!");out.flush();out.close();publicvoiddoPost(ServletRequestrequest,ServletResponseresponse)throwsServletException,IOExceptionthis.doPost(request,response);ViewControllerJava中轉(zhuǎn)換為Json對(duì)象->Java對(duì)象瀏覽器Js中Json文本或js對(duì)象->Json對(duì)象-R
40、equestString。Java中轉(zhuǎn)換為Json對(duì)象<-Java對(duì)象Js中Json對(duì)象<-Json文本ResponseString中提供了JSON的方法,String.evalJSON(),可以不使用中的函數(shù)對(duì)從效勞器端響應(yīng)到頁面的json文本對(duì)象,修改上面的方法js代碼functionjsonResponse(originalRequest)alert(originalRequest.responseText);varmyobj=originalRequest.responseText.evalJSON(true);alert();5、JSON效勞器端的數(shù)據(jù)
41、格式轉(zhuǎn)化的應(yīng)用JSON還提供了java的jar包:也很簡(jiǎn)單,下面舉個(gè)案例:在javascript中填加懇求參數(shù)js代碼functionCar(make,model,year,color)this.make=make;this.model=model;this.year=year;this.color=color;functionsendRequest()varcarr=newCar("Dodge","CoronetR/T",1968,"yellow");varpars="car="+carr.toJSONStrin
42、g();varurl="/MyWebApp/JSONTest1"varmailAjax=newAjax.Request(url,method:'get',parameters:pars,onComplete:jsonResponse);使用JSON懇求字符串就可以簡(jiǎn)單的生成JSONObject并進(jìn)展解析(要使用json-lib.jar)privatevoiddoService(ServletRequestrequest,ServletResponseresponse)throwsIOExceptionStrings3=request.getParameter
43、("car");tryJSONObjectjsonObj=newJSONObject(s3);System.out.println(jsonObj.getString("model");System.out.println(jsonObj.getInt("year");catch(JSONExceptione)e.printStackTrace();response.getWriter().print(""name":"張三","sex":"男"
44、");同樣可以使用JSONObject生成JSON符串,修改servletjava代碼privatevoiddoService(ServletRequestrequest,ServletResponseresponse)throwsIOExceptionStrings3=request.getParameter("car");tryJSONObjectjsonObj=newJSONObject(s3);System.out.println(jsonObj.getString("model");System.out.println(jsonObj
45、.getInt("year");catch(JSONExceptione)e.printStackTrace();JSONObjectresultJSON=newJSONObject();tryresultJSON.append("name","張三").append("sex","男").append("age",newInteger(22);System.out.println(resultJSON.toString();catch(JSONExceptione)e.pr
46、intStackTrace();response.getWriter().print(resultJSON.toString();js代碼functionjsonResponse(originalRequest)alert(originalRequest.responseText);varmyobj=originalRequest.responseText.evalJSON(true);alert();alert(myobj.age);五、Struts2中使用Jsonajax支持JSON插件提供了一種名為json的ResultType,一旦為某個(gè)Action指定了一個(gè)類型為
47、json的Result,那么該Result無需映射到任何視圖資源。因?yàn)镴SON插件會(huì)負(fù)責(zé)將Action里的狀態(tài)信息序列化成JSON格式的數(shù)據(jù),并將該數(shù)據(jù)返回給客戶端頁面的JavaScript簡(jiǎn)單地說,JSON插件允許我們?cè)贘avaScript中異步調(diào)用Action,而且Action不再需要使用視圖資源來顯示該Action里的狀態(tài)信息,而是由JSON插件負(fù)責(zé)將Action里的狀態(tài)信息返回給調(diào)用頁面通過這種方式,就可以完成Ajax交互。Struts2提供了一種可插拔方式來管理插件,安裝Struts2的JSON插件與安裝普通插件并沒有太大的區(qū)別,一樣只需要將Struts2插件的JAR文件復(fù)制到Web
48、應(yīng)用的WEB-INF/lib途徑下即可。安裝JSON插件按如下步驟進(jìn)展:1登陸/p/jsonplugin/downloads/list站點(diǎn),下載Struts2的JSON插件的最新版本,當(dāng)前最新版本是,我們可以下載該版本的JSON插件。2將下載到的文件復(fù)制到Web應(yīng)用的WEB-INF途徑下,即可完成JSON插件的安裝。實(shí)現(xiàn)Action邏輯假設(shè)輸入頁面中包含了四個(gè)表單域,這四個(gè)表單域?qū)τ谒膫€(gè)懇求參數(shù),因此應(yīng)該使用Action來的dept對(duì)象封裝這四個(gè)懇求參數(shù)。四個(gè)表單域的name分別為、和。處理該懇求的Action類代碼如下:packageorg.wllt.ajax.actions;importj
49、ava.util.Date;importjava.util.HashMap;importjava.util.Map;importorg.wllt.ajax.beans.Dept;importcom.googlecode.jsonplugin.annotations.JSON;importcom.opensymphony.xwork2.Action;publicclassJSONExample/封裝懇求參數(shù)的三個(gè)屬性privateStringfield1;privatetransientStringfield2;privateStringfield3;/封裝處理結(jié)果的屬性privateintin
50、ts=10,20;privateMapmap=newHashMap();privateStringcustomName="custom"/日期格式的屬性privateDatedate;privateDeptdept;/三個(gè)懇求參數(shù)對(duì)應(yīng)的setter和getter方法JSON(serialize=false)publicStringgetField1()returnfield1;publicvoidsetField1(Stringfield1)this.field1=field1;/封裝處理結(jié)果的屬性的setter和getter方法publicintgetInts()retu
51、rnints;publicvoidsetInts(intints)s=ints;JSON(format="yyyy-MM-dd")publicMapgetMap()returnmap;publicvoidsetMap(Mapmap)this.map=map;publicStringgetField2()returnfield2;publicvoidsetField2(Stringfield2)this.field2=field2;publicStringgetField3()returnfield3;publicvoidsetField3(Stringfie
52、ld3)this.field3=field3;publicDeptgetDept()returndept;publicvoidsetDept(Deptdept)this.dept=dept;/使用注釋語法來改變?cè)搶傩孕蛄谢蟮膶傩悦鸍SON(name="newName")publicStringgetCustomName()returnthis.customName;JSON(format="yyyy-MM-dd")publicDategetDate()returndate;publicvoidsetDate(Datedate)this.date=dat
53、e;publicStringexecute()map.put("name","yeeku");map.put("curdate",newDate();returnAction.SUCCESS;在上面代碼中,使用了JSON注釋,注釋時(shí)指定了name域,name域指定Action屬性被序列化成JSON對(duì)象的屬性名。除此之外,JSON注釋還支持如下幾個(gè)域:Name:Action屬性被序列化成JSON對(duì)象的屬性名serialize:設(shè)置是否序列化該屬性(默認(rèn)的action的所有屬性都會(huì)序列化成json文本響應(yīng)到原頁面,也可以根據(jù)需要設(shè)定某些屬
54、性不序列化)。也可以通過在配置json類型的結(jié)果的時(shí)候定義需要不序列化的屬性:<resultname="success"type="json"><paramname="excludeProperties">service,joindate,dept</param></result>deserialize:設(shè)置是否反序列化該屬性。format:設(shè)置用于格式化輸出、解析日期表單域的格式。例如"yyyy-MM-dd'T'HH:mm:ss"。一般需要注釋到需要
55、轉(zhuǎn)換日期格式屬性的get方法上面配置該Action與配置普通Action存在小小的區(qū)別,為該Action配置結(jié)果類型為json的Result。而這個(gè)Result無需配置任何視圖資源,只需要把通過該結(jié)果把json文本響應(yīng)到原頁面。配置該Action的文件代碼如下:<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEstrutsPUBLIC"-/ApacheSoftwareFoundation/DTDStrutsConfiguration2.0/EN"":/struts.a
56、/dtds/struts-2.0.dtd"><struts><constantname="struts.locale"value="zh_CN"/><constantname="struts.action.extension"value="do,action"/><packagename="json"extends="json-default"><actionname="dept
57、"class="org.wllt.ajax.actions.DeptAction"><resulttype="json"/></action></package></struts>在上面配置文件中有兩個(gè)值得注意的地方:第一個(gè)地方是配置常量時(shí),不再是使用GBK編碼,而是UTF-8編碼,這是因?yàn)锳jax的POST懇求都是以UTF-8的方式進(jìn)展編碼的。第二個(gè)地方是配置包時(shí),自己的包繼承了json-default包,而不再繼承默認(rèn)的default包,這是因?yàn)橹挥性谠摪虏庞衘son類型的Result
58、。實(shí)現(xiàn)JSP頁面:為了簡(jiǎn)單地訪問DOM節(jié)點(diǎn),這里用了JavaScript框架Prototype.js.<html><head><title>使用JSON插件</title><meta-equiv="content-type"content="text/html;charset=UTF-8"><scriptsrc="./js/prototype.js"type="text/javascript"></script><script
59、language="JavaScript">functiongotClick()/懇求的地址varurl='./dept.do'/將Form中所有Input對(duì)象的值轉(zhuǎn)化為一個(gè)URLString,方便把Form轉(zhuǎn)為用URLGet方式/的Ajax提交,常用Ajax提交Form的例子:varparams=Form.serialize('form1');/創(chuàng)立對(duì)象,對(duì)應(yīng)于發(fā)送懇求varmyAjax=newAjax.Request(url,/懇求方式:POSTmethod:'post',/懇求參數(shù)parameters:params
60、,/指定回調(diào)函數(shù)onComplete:processResponse,/是否異步發(fā)送懇求asynchronous:true);functionprocessResponse(request)$("show").innerHTML=request.responseText;</script></head><body><formid="form1"name="form1"method="post">部門編號(hào)<INPUTTYPE="text"nam
61、e="dept.deptid"id="deptid"/><br>部門名稱<INPUTTYPE="text"name="dept.deptname"id="deptname"/><br>部門編制<INPUTTYPE="text"name="dept.deptnum"id="deptnum"/><br>部門描繪<INPUTTYPE="text"nam
62、e="dept.deptdesc"id="deptdesc"/><br><INPUTTYPE="button"value="提交"onClick="gotClick();"/></form><divid="show"></div></body></html>六、當(dāng)json碰到hibernate延時(shí)加載在開發(fā)工程過程中,遇到了failedtolazilyinitializeacollect
63、ionofrole:org.wllt.pojo.Dept.emps,nosessionorsessionwasclosed這個(gè)異常的出現(xiàn),通過以下方法可以解決這個(gè)問題:1、是把對(duì)應(yīng)一對(duì)多的那兩個(gè)列l(wèi)azy=true改為lazy=false即可;2、對(duì)于查詢中假設(shè)用的是class,id那么改為xxx,get(class,id);3、在文件中參加:<filter><filter-name>hibernateFilter</filter-name><filter-class></filter-class><init-param>
64、<param-name>singleSession</param-name><param-value>false</param-value></init-param><!-這個(gè)-<init-param>一定要加不然很可能會(huì)報(bào)錯(cuò):org.springframework.dao.InvalidDataAccessApiUsageException:Writeoperationsarenotallowedinread-onlymode(FlushMode.NEVER)-turnyourSessionintoFlushMod
65、e.AUTOorremove'readOnly'markerfromtransactiondefinition-></filter><filter-mapping><filter-name>hibernateFilter</filter-name><url-pattern>*.wllt</url-pattern></filter-mapping>對(duì)以上方法進(jìn)展一一測(cè)試,到后來結(jié)果都是一樣,出現(xiàn)同樣的異常,其實(shí)spring能很好地解決這個(gè)問題,Spring框架為Hibernate延遲加載與DAO形式的整合提供了一種方便的解決方法。以一個(gè)Web應(yīng)用為例,Spring提供了OpenSessionInViewFilter和OpenSessionInViewInterceptor。我們可以隨意選擇一個(gè)類來實(shí)現(xiàn)一樣的功能。兩種方法唯一的不同就在于interceptor在Spring容器中運(yùn)行并被配置在web應(yīng)用
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國射頻功率放大器行業(yè)開拓第二增長曲線戰(zhàn)略制定與實(shí)施研究報(bào)告
- 2025-2030年中國企業(yè)管理培訓(xùn)行業(yè)營銷創(chuàng)新戰(zhàn)略制定與實(shí)施研究報(bào)告
- 2025-2030年中國新型健康服務(wù)行業(yè)資本規(guī)劃與股權(quán)融資戰(zhàn)略制定與實(shí)施研究報(bào)告
- 新形勢(shì)下高空作業(yè)平臺(tái)行業(yè)快速做大市場(chǎng)規(guī)模戰(zhàn)略制定與實(shí)施研究報(bào)告
- 比較文學(xué)情境母題研究
- 建設(shè)無煙學(xué)校宣傳資料
- 建設(shè)培訓(xùn)中心規(guī)章制度
- 初中地理會(huì)考知識(shí)點(diǎn)
- 2025年中國電信運(yùn)營商行業(yè)全景評(píng)估及投資規(guī)劃建議報(bào)告
- 云南省楚雄州2023-2024學(xué)年九年級(jí)上學(xué)期期末教育學(xué)業(yè)質(zhì)量監(jiān)測(cè)化學(xué)試卷
- 煤礦巷道噴涂技術(shù)方案
- 新版中國腦出血診治指南
- 高校搬遷可行性方案
- 充電樁選址優(yōu)化與布局規(guī)劃
- 科技產(chǎn)業(yè)園項(xiàng)目投資計(jì)劃書
- 苗木采購?fù)稑?biāo)方案(技術(shù)標(biāo))
- JJF 1030-2023溫度校準(zhǔn)用恒溫槽技術(shù)性能測(cè)試規(guī)范
- 輸變電工程安全文明施工設(shè)施標(biāo)準(zhǔn)化配置表
- 一銷基氯苯生產(chǎn)車間硝化工段工藝初步設(shè)計(jì)
- 自動(dòng)控制原理仿真實(shí)驗(yàn)課程智慧樹知到課后章節(jié)答案2023年下山東大學(xué)
- 【城市軌道交通運(yùn)營安全管理研究9200字(論文)】
評(píng)論
0/150
提交評(píng)論