• JQuery+struts2+Ajax实现用户名验证


    今天复习struts2实现ajax验证用户名是否存在

    出现了一个问题,就是说单独新建一个action类文件和添加在其他action类文件中的效果显示不一样,而且重写ActionSupport方法的Validate方法也会造成没有定义action的result的异常,不知道为什么,但是两个都可以实现,先把主要代码贴出来,改天好好研究一下,也希望各位帮小弟解释一下,谢啦!:

    两种方法的区别就在配置文件,如下,选择其中一种,结果却显示不同,

    struts.xml:

    <?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:

    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.java

    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.js

    $(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.jsp

    <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中的不匹配,因为它多了一个换行符' ',这么一点小错误,害了我好几个小时啊,一定要细心啊!

  • 相关阅读:
    CCF|学生排队|Java
    CCF|分蛋糕|Java
    CCF|公共钥匙盒|Java
    CCF|打酱油|Java
    CCF|游戏|Java
    CCF|最小差值|Java
    CCF|路径解析|Java
    CCF|碰撞的小球
    CCF|跳一跳
    Win10 1803更新UWP无法安装的解决办法|错误代码0x80073D0D
  • 原文地址:https://www.cnblogs.com/mecca/p/3508016.html
Copyright © 2020-2023  润新知