今天复习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',这么一点小错误,害了我好几个小时啊,必定要细心啊!