ssh+ajax 注册验证 以及struts2+json注意事项

来源:互联网 发布:软件选型评分表 编辑:程序博客网 时间:2024/05/16 09:32

在我们日常开发中,经常会遇到注册时进行用户名异步验证这一步,下面是我开发时的一个小例子,希望能对大家有帮助。需要注意的是,我们后台是利用json返回json字符串,struts2整合json我们需要加入以下jar包:

<dependency><groupId>org.apache.struts</groupId><artifactId>struts2-json-plugin</artifactId><version>2.3.16</version></dependency><dependency><groupId>net.sf.json-lib</groupId><artifactId>json-lib</artifactId><version>2.4</version><classifier>jdk15</classifier></dependency>


页面效果:左图是用户名已被注册,右图是允许注册。


下面是我的前台代码:

<script type="text/javascript">function checkLogin(){var xmlHttp;var name = document.getElementById("email").value;if(window.XMLHttpRequest){xmlHttp = new XMLHttpRequest();}else {xmlHttp = new ActiveXObject("MicroSoft.XMLHTTP");//老版本的ie}xmlHttp.onreadystatechange=function(){if(xmlHttp.readyState==4 && xmlHttp.status==200){//var ss = xmlHttp.responseText;var dataObj=eval("("+xmlHttp.responseText+")");if(dataObj.exist=="false"){document.getElementById("tip").innerHTML="<img src='images/ok.png'/>";}else{document.getElementById("tip").innerHTML="<img src='images/no.png'/>";}}};xmlHttp.open("post","Json_checkRegister.action?checkname="+name,true);xmlHttp.send();}</script>

<p><input type="email" id="email" name="user.username" onblur="checkLogin();" class="loginInput" autofocus="autofocus" required="required" autocomplete="off" placeholder="请输入电子邮箱" value="" /><font id="tip"></font></p>



下面是后台action代码:

public String checkRegister() throws Exception{HttpServletResponse response = ServletActionContext.getResponse();JSONObject json=new JSONObject();  PrintWriter out  = response.getWriter();if(this.userservice.checkRegister(checkname)==false){json.put("exist", "false");out.println(json);  out.flush();out.close();return "userAllowRegister";}json.put("exist", "true");out.println(json); out.flush();out.close();return "userNoRegister";}


配置文件strut.xml代码:

<package name="json" namespace="/" extends="json-default"><action name="Json_*" class="user_action" method="{1}"><result name="userAllowRegister" type="json"></result><result name="userNoRegister" type="json"></result></action></package>

注意返回类型为json

JSON(Java Script Object Notation),是一种语言无关的数据交换格式。 
JSON插件是Structs 2 的Ajax插件,通过利用JSON插件,开发者可以很方便,灵活的利用Ajax进行开发。
Json是一种轻量级的数据交换格式,JSon插件提供了一种名为json的Action ResultType 。
一旦为Action指定了该结果处理类型,JSON插件就会自动将Action里的数据序列化成JSON格式的数据,
并返回给客户端物理视图的JavaScript。简单的说,JSON插件允许我们在JavaScript中异步的调用Action,
而且Action不需要指定视图来显示Action的信息显示。
而是由JSON插件来负责具体将Action里面具体的信息返回给调用页面。
Json的数据格式可简单如下形式: person = { name: 'Jim',age: 18,gender: 'man'}。
如果action的属性很多,我们想要从Action返回到调用页面的数据。

如果我们在后台不希望返回的数据,可以禁止其被序列化,可以使用 @JSON(serialize=false)注解对其屏蔽,说明
此属性不被加入json。


以下三个注解也经常会用到:
在属性get方法上面加

@JSON(name="newName")json中的名称
@JSON(serialize=false)属性不被加入
json@JSON(format="yyyy-MM-dd")格式化日期


这个时候配置includeProperties或者excludeProperties拦截器即可。

<!-- 只包含user.id属性 --><resulttype="json"name="user"><paramname="includeProperties">user\.id</param>

<!-- 不包含user属性 --><resulttype="json"name="list"><paramname="excludeProperties">user</param></result><!-- 根对象只包含user --><resulttype="json"><paramname="root">user</param></result>


                                             
0 0
原创粉丝点击