成人免费在线视频网,日韩一区中文字幕,欧美视频亚洲视频http://www.aygfsteel.com/cool2009/category/38164.html專(zhuān)注于java相關(guān)技術(shù).zh-cnTue, 10 Mar 2009 20:06:41 GMTTue, 10 Mar 2009 20:06:41 GMT60關(guān)于strusts2 的2.16版本中404錯(cuò)誤http://www.aygfsteel.com/cool2009/articles/258704.html龍華城龍華城Tue, 10 Mar 2009 00:55:00 GMThttp://www.aygfsteel.com/cool2009/articles/258704.htmlhttp://www.aygfsteel.com/cool2009/comments/258704.htmlhttp://www.aygfsteel.com/cool2009/articles/258704.html#Feedback0http://www.aygfsteel.com/cool2009/comments/commentRss/258704.htmlhttp://www.aygfsteel.com/cool2009/services/trackbacks/258704.html 我并沒(méi)有用上傳組建啊,為什么在這個(gè)版本里非得加入這個(gè)jar包呢.

龍華城 2009-03-10 08:55 發(fā)表評(píng)論
]]>
使用struts2+prototype.js創(chuàng)建無(wú)刷新注冊(cè)檢測(cè)(轉(zhuǎn)載)http://www.aygfsteel.com/cool2009/articles/258405.html龍華城龍華城Sat, 07 Mar 2009 13:21:00 GMThttp://www.aygfsteel.com/cool2009/articles/258405.htmlhttp://www.aygfsteel.com/cool2009/comments/258405.htmlhttp://www.aygfsteel.com/cool2009/articles/258405.html#Feedback0http://www.aygfsteel.com/cool2009/comments/commentRss/258405.htmlhttp://www.aygfsteel.com/cool2009/services/trackbacks/258405.html最近有一個(gè)項(xiàng)目要上,決定struts2+hibernate+spring開(kāi)發(fā),可現(xiàn)在AJAX如火如荼,而且功能上也大大方便了程序員開(kāi)發(fā)和WEB頁(yè)面,如果不用,太對(duì)不起Jesse James Garrett(AJAX的創(chuàng)始人)。可我以前一直是做后臺(tái)的開(kāi)發(fā),對(duì)前臺(tái)的JS知識(shí)是鳳毛麟角,直接嘗試用AJAX,時(shí)間、精力浪費(fèi)不起。后來(lái),在與一同事聊天時(shí),提到了prototype.js,說(shuō)學(xué)會(huì)了這個(gè),AJAX將成囊中之物,姑且對(duì)他的話持保留態(tài)度。但在看了這個(gè)JS的源碼后,真是的柳暗花明又一村。

prototype.js是什么?

讓我來(lái)告訴你,prototype.js是由Sam Stephenson寫(xiě)的一個(gè)javascript類(lèi)庫(kù)。這個(gè)構(gòu)思奇妙,而且兼容標(biāo)準(zhǔn)的類(lèi)庫(kù),能幫助你輕松建立有高度互動(dòng)的web2.0特性的富客戶端頁(yè)面。

如果你最近嘗試使用它,你大概了解到文檔并不是作者的一個(gè)強(qiáng)項(xiàng)。和在我以前使用這個(gè)類(lèi)庫(kù)的不少開(kāi)發(fā)者一樣,一開(kāi)始,我不得不一頭扎進(jìn)閱讀prototype.js的源代碼和實(shí)驗(yàn)它的功能中。因此,如果你是偷懶者,可以在GOOGLE里搜索關(guān)于它的東西。

開(kāi)始創(chuàng)建項(xiàng)目

項(xiàng)目介紹:項(xiàng)目中使用了struts2,spring IOC,主要完成了一個(gè)無(wú)刷新檢測(cè)用戶名是否已經(jīng)在數(shù)據(jù)庫(kù)中注冊(cè)的簡(jiǎn)單功能。

本文重點(diǎn)介紹prototype.js,因此關(guān)于struts2的東西,將不重點(diǎn)講解。

首先看一下,struts2的配置文件:  

  1. <action name="register" method="register" class="userAction">  
  2.    <result>/register_success.jspresult>  
  3.    <result name="input">/register.jspresult>  
  4. action>  
  5. <action name="check" method="check" class="userAction">            
  6. action>  

可以看到這里有兩個(gè)Action,“register”是用戶提交注冊(cè)的,“check”是為用戶名檢測(cè)預(yù)留的。兩個(gè)Action的方法都是在userAction中,而這個(gè)類(lèi)交給了spring來(lái)管理,看以下代碼: 

  1. <bean id="userAction" class="com.caitong.pingou.action.UserAction"         
  2.         autowire="byName">  
  3. bean>  

然后,我們?cè)倏匆幌聈serAction的東西吧。

java 代碼
  1. public class UserAction extends ActionSupport {   
  2.   
  3.  private User user;//User類(lèi)是一個(gè)很簡(jiǎn)單的JAVA BEAN,主要包括用戶名,密碼,年齡,性別等屬性   
  4.  public User getUser() {   
  5.   return user;   
  6.  }   
  7.   
  8.  public void setUser(User user) {   
  9.   this.user = user;   
  10.  }   
  11.   
  12.  public String execute(){   
  13.   return null;   
  14.  }   
  15.     
  16.  /**  
  17.   * 客戶端檢測(cè)用戶名是否已經(jīng)注冊(cè)過(guò)  
  18.   *  
  19.   */  
  20.  public void check(){   
  21.   HttpServletResponse response = ServletActionContext.getResponse(); //取response對(duì)象   
  22.   HttpServletRequest request = ServletActionContext.getRequest();//取request對(duì)象   
  23. //服務(wù)器響應(yīng)   
  24.   response.setContentType("text/xml;charset=utf-8");   
  25.   response.setHeader("Cache-Control","no-cache");   
  26.   
  27.   String name = request.getParameter("user.username");   
  28.   
  29.   String msgStr="";   
  30.   boolean flag = name.equals("abc");//從數(shù)據(jù)庫(kù)中檢測(cè)該用戶名是否已經(jīng)存在     
  31.   if(flag){      
  32.       msgStr ="對(duì)不起,此用戶名已經(jīng)存在,請(qǐng)更換用戶名";   
  33.   }      
  34.   else{   
  35.    msgStr ="用戶未被注冊(cè),可以使用!";      
  36.   }   
  37.      
  38.   try{//response寫(xiě)信息   
  39.    response.getWriter().print(msgStr);   
  40.    response.getWriter().close();   
  41.   }catch(IOException e){   
  42.    e.printStackTrace();   
  43.   }    
  44.  }   
  45.   
  46. /**  
  47.   * 提交注冊(cè)  
  48.   * @return  
  49.   */  
  50.  public String register(){   
  51.   if(!abc".equals(user.getUsername()){//如果數(shù)據(jù)庫(kù)中沒(méi)有用戶   
  52.       save(User);//偽代碼,保存用戶   
  53.   else  
  54.       return INPUT;   
  55.    reutrn SUCCESS;   
  56. }   

基本上在類(lèi)里已經(jīng)注釋過(guò)了,自己的工程是通過(guò)服務(wù)層來(lái)判斷用戶是否已經(jīng)注冊(cè)過(guò),其中服務(wù)層又是調(diào)用DAO層,所有的CLASS都交給SPRING來(lái)管理,其中標(biāo)識(shí)偽代碼的部份,有興趣的人,可以自己試著寫(xiě)一下,從數(shù)據(jù)庫(kù)取數(shù)據(jù),然后判斷。

最后一起看一下WEB層的register.jsp,prototype將粉墨登場(chǎng)

 

js 代碼
  1. <%@ page contentType="text/html; charset=utf-8" %>   
  2. <%@ taglib  prefix="s" uri="/struts-tags"%>   
  3.   
  4. <html>   
  5. <head>   
  6. <title>注冊(cè)</title>   
  7. <script language="JavaScript" type="text/javascript"    
  8.         src="js/prototype.js"></script>   
  9. <script language="JavaScript">     
  10.     function showResponse(originalRequest){               
  11.         Element.hide($('load'));//用設(shè)定它的 style.display 為 'none'來(lái)隱藏每個(gè)傳入的元素。   
  12.         alert(originalRequest.responseText); //彈出服務(wù)器端的msgStr字符串   
  13.         Form.reset($('register'));//重置表單。和調(diào)用表單對(duì)象的 reset() 方法一樣。   
  14.         Field.focus($('user.username')); //移動(dòng)焦點(diǎn)到給定的表單項(xiàng)目。   
  15.                  
  16.     }   
  17.     function showDiv(){        
  18.         Element.show($('load'));//用設(shè)定它的 style.display 為 ''來(lái)顯示每個(gè)傳入的元素。   
  19.     }   
  20.     //身份驗(yàn)證    
  21.     function check(){          
  22.         var pars=Form.Element.serialize($('user.username'));   
  23.         var url='check.action'; //返回元素的 名稱(chēng)=值 對(duì), 如 'elementName=elementValue'           
  24.            
  25.         if($F('user.username')==""){   
  26.             alert("請(qǐng)輸入姓名!");   
  27.             return false;   
  28.         }   
  29.         else{   
  30.             var myAjax = new Ajax.Request(   
  31.                     url,{method:'get',   
  32.                     parameters:pars,   
  33.                     onLoading:showDiv,   
  34.                     onComplete:showResponse,   
  35.                     onFailure:reportError});//構(gòu)造函數(shù),見(jiàn)講解   
  36.        }   
  37.     }   
  38.     function reportError(){   
  39.         alert('嚴(yán)重故障,請(qǐng)重試!');   
  40.     }   
  41.       
  42.         
  43. </script>   
  44.   
  45. <s:head/>   
  46. </head>   
  47.     

 

  1. <body>  
  2.         <center>  
  3.         <br/><br/><br/><br/><br/><br/><br/><br/>  
  4.         <p><div id="load" style="display:none">正在驗(yàn)證用戶名,請(qǐng)稍后……</div></p>  
  5.                
  6.         <s:form action="regiseter" method="post">  
  7.             <s:textfield name="user.username" label="UserName"></s:textfield>  
  8.             <input type="button" value="檢測(cè)!" onClick="check()"/>  
  9.             <s:textfield name="user.password" label="PassWord"></s:textfield>  
  10.             <s:textfield name="user.age" label="Age"></s:textfield>  
  11.             <s:textfield name="user.sex" label="Sex"></s:textfield>  
  12.             <s:submit></s:submit>  
  13.         </s:form>  
  14.         </center>  
  15.        
  16.   </body>  
  17. </html>  


龍華城 2009-03-07 21:21 發(fā)表評(píng)論
]]>
主站蜘蛛池模板: 饶阳县| 普定县| 福海县| 四子王旗| 聂拉木县| 朔州市| 宜宾市| 稻城县| 错那县| 兴海县| 嘉义县| 通海县| 光山县| 朝阳市| 台南县| 谷城县| 乌兰浩特市| 繁峙县| 赤水市| 孝义市| 剑阁县| 崇文区| 普安县| 肃北| 公主岭市| 九龙城区| 闸北区| 乐山市| 普安县| 弥渡县| 康保县| 万全县| 永济市| 大名县| 湟源县| 平乐县| 潍坊市| 安图县| 西乡县| 大竹县| 来安县|