JQuery+struts2+Ajax實現用戶名驗證

今天覆習struts2實現ajax驗證用戶名是否存在html

出現了一個問題,就是說單獨新建一個action類文件和添加在其餘action類文件中的效果顯示不同,並且重寫ActionSupport方法的Validate方法也會形成沒有定義action的result的異常,不知道爲何,可是兩個均可以實現,先把主要代碼貼出來,改天好好研究一下,也但願各位幫小弟解釋一下,謝啦!:java

兩種方法的區別就在配置文件,以下,選擇其中一種,結果卻顯示不一樣,ajax

struts.xml:sql

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
    "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>    
       <constant name="struts.devMode" value="true" /> 
    <package name="test" extends="json-default" namespace="/">     
      
       <!--嵌入loginAction中方法-->
                <action name="ajaxCheck" class="com.train.zaj.action.LoginAction" method="ajaxCheck">
                   <result name="success" type="json"/> 
               </action>
       <!--使用單個ajaxCheck類文件
               <action name="ajaxCheck" class="com.train.zaj.action.ajaxCheck" >
                   <result name="success" type="json"/>                                     
               </action>
      -->
</package> </struts>

LoginAction.java:apache

package com.train.zaj.action;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.train.zaj.dao.QueryUserDao;
import com.train.zaj.dao.impl.QueryUserDaoImpl;
import com.train.zaj.model.Userinfo;
import com.train.zaj.util.DB;

public class LoginAction extends ActionSupport {
    private HttpServletRequest request;
    public HttpServletResponse response;
public HttpServletResponse getResponse() {
        return response;
    }

    public void setResponse(HttpServletResponse response) {
        this.response = response;
    }

public String result;

    public String getResult() {
    return result;
}
public void setResult(String result) {
    this.result = result;
}
    public HttpServletRequest getRequest() {
        return request;
    }
    public void setRequest(HttpServletRequest request) {
        this.request = request;
    }

    private String acount;
    private String password;

    public String getAcount() {
        return acount;
    }
    public void setAcount(String acount) {
        this.acount = acount;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String execute() {
        request = ServletActionContext.getRequest();       
        Connection conn = DB.createConn();
        QueryUserDao dao = new QueryUserDaoImpl(conn);
        Userinfo user = new Userinfo();
        user.setAcount(acount);
        Userinfo u = new Userinfo();
        u = dao.QueryUser(user);
        System.out.println(u.getPassword() + u.getAcount());
        if (password.equals(u.getPassword())) {
            System.out.println(u.getRelations() + "*************");
            System.out.println(request);
            request.getSession().setAttribute("relations", u.getRelations());
            request.getSession().setAttribute("user", u.getAcount());
           } else {
            addFieldError("acount", "用戶名或密碼錯誤!請從新輸入");
        }
        return SUCCESS;
    }
    public void ajaxCheck() throws IOException{
        request=ServletActionContext.getRequest();
        response=ServletActionContext.getResponse();
        response.setContentType("text/html;charset=utf-8");
        PrintWriter w = response.getWriter();
       
        System.out.println("________________");
        if(acount.equals("18713520529")){            
            w.print("可使用");
            System.out.println("可使用");
        }else{          
            w.print("不可使用");
            System.out.println("不可使用");
        }        
    }
}

單獨的action類文件,ajaxCheck.javajson

package com.train.zaj.action;
import java.io.IOException; import java.io.PrintWriter;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class ajaxCheck extends ActionSupport { HttpServletRequest request; HttpServletResponse response; public HttpServletRequest getRequest() { return request; } public void setRequest(HttpServletRequest request) { this.request = request; } public HttpServletResponse getResponse() { return response; } public void setResponse(HttpServletResponse response) { this.response = response; } public String acount; public String getAcount() { return acount; } public void setAcount(String acount) { this.acount = acount; } public String execute() throws IOException { request = ServletActionContext.getRequest(); response = ServletActionContext.getResponse(); response.setContentType("text/html;charset=utf-8"); PrintWriter w = response.getWriter(); if ("18713520529".equals(acount)) { w.println("可使用"); System.out.println("可使用"); } else { w.println("不可使用"); System.out.println("不可使用"); } w.close(); return SUCCESS; } }

下邊是js,index.jsjsp

$(document).ready(function(){   
    var inputUserNameObj = $("#acount");  
    inputUserNameObj.keyup(function(){   
        var text = inputUserNameObj.val();       
    });          
    $("#acount").blur(function(){   
        var text = inputUserNameObj.val();   
        $.post("ajaxCheck.action?acount="+text,null,function(response){   
           alert("js"+response);
            if(response!=('可使用')){
             document.getElementById("namemessage").innerHTML="<font color='red'>"+response+"</font>";
            }else{
             document.getElementById("namemessage").innerHTML="<font color='green'>"+response+"</font>";
            }
        });   
    });          
});  

login.jsppost

<body>
    <div id="Layer1" align="center">
    <span id="namemessage"></span>
    <s:form action="Login" >
    <table width="60%" height="76" border="0">
    <s:textfield name="acount" label="用戶名" id="acount"/>
    <s:password name="password" label="密碼"/>
    <s:submit value="登錄" align="center"/>    
    </table>
    </s:form>
  </div>
  </body>

就是上邊這些文件,最後形成的結果徹底不同,採用嵌入LoginAction.java的方法,顯示的結果爲預期結果,若是正確即存在該用戶,則顯示綠色「可使用」提示,若是是不存在該用戶,則顯示紅色「不可使用」:測試

可是使用單獨的ajaxCheck文件,顯示的結果不管用戶名是否存在,均顯示紅色的字體,而文字是正確的,字體

 

修改:

又測試了一下,把顯示正常的判讀語句複製到不正常的ajaxCheck,竟然……顯示正確……了,難道是判斷語句有區別?

/*顯示全紅*/
if
("18713520529".equals(acount)) { w.println("可使用"); System.out.println("可使用"); } else { w.println("不可使用"); System.out.println("不可使用"); } /*//能夠正常顯示
      *
if(acount.equals("18713520529")){ w.print("可使用"); System.out.println("可使用"); }else{ w.print("不可使用"); System.out.println("不可使用"); }*/

仔細看一下,貌似只有if的判斷語句先後位置不一樣,把判斷語句寫成同樣的:

if (acount.equals("18713520529")) {            
            w.println("可使用");
            System.out.println("可使用");
        } else {
            w.println("不可使用");
            System.out.println("不可使用");
        }
        /*if(acount.equals("18713520529")){            
            w.print("可使用");
            System.out.println("可使用");
        }else{            
            w.print("不可使用");
            System.out.println("不可使用");
        }*/

按理說應該行了吧?但是結果特扯……竟然仍是顯示全紅……這讓我如何是好……就算多一些空格也不至於這樣吧?!爲何……

仔細對比……額……額……額……!!!有麼有發現一個重要的錯誤!……w.print不同,有一個多了一個ln,不管結果爲「可使用」仍是」不可使用「,均與js中的不匹配,由於它多了一個換行符'\n',這麼一點小錯誤,害了我好幾個小時啊,必定要細心啊!

相關文章
相關標籤/搜索