在项目中的注册页面需要判断用户名是否存在,采用了jquery的验证框架的remote方法来实现。
1、js脚本:
jQuery.validator.addMethod("usename", function(value, element) {
return this.optional(element) || value.length >= 4 && value.length <= 12 &&(//d/.test(value) || /[a-z] /i.test(value)); }, "用户名应包含4-12个数字、字母");
$("form").validate({
rules:{
username:{
required:true,
remote:"checkUserAvailable.action"//用户名是否存在的Action
}
},
messages: {
username:{
required:"请输入用户名",
remote:"该用户名已经被注册"//当后台返回false时显示在页面的div
}
}
});
2、java代码:
由于jquery的remote方法只允许返回true或者false,当返回false时,输出messages的内容:"该用户名已经被 注册"。在Struts2的有两种方法可以实现:
(1)、利用HttpServletResponse对象的response实例,Java代码如下:
String text="true";
if(memberService.findByUsername(member.getUsername()) != null){
text="false";//如果用户名已存在,则输出false
}
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/plain;charset=UTF-8");
response.getWriter().write(text);
return null;
struts.xml配置:可以不用配置<result>输出项。本方法的缺点是依赖于HttpServletResponse。
(2)、使用Struts2的stream返回类型:
Boolean canSign = true;
// 数据库中是否存在该用户名
if (memberService.findByUsername(member.getUsername()) != null) {
canSign = false;// 表示存在,要返回false
}
inputStream = new ByteArrayInputStream(canSign.toString().getBytes()); //将true或者false转化为流,要为inputStream提供getter方法。
return SUCCESS;
struts.xml配置:
<result type="stream">
<param name="contentType">text/plain</param>
<param name="inputName">inputStream</param>
</result>
以上的contentType不能使用text/html类型,也可以不用配置该项,默认就是text/plain类型。
jQuery.validator.addMethod("usename", function(value, element) {
return this.optional(element) || value.length >= 4 && value.length <= 12 &&(//d/.test(value) || /[a-z] /i.test(value)); }, "用户名应包含4-12个数字、字母");
$("form").validate({
rules:{
username:{
required:true,
remote:"checkUserAvailable.action"//用户名是否存在的Action
}
},
messages: {
username:{
required:"请输入用户名",
remote:"该用户名已经被注册"//当后台返回false时显示在页面的div
}
}
});
2、java代码:
由于jquery的remote方法只允许返回true或者false,当返回false时,输出messages的内容:"该用户名已经被 注册"。在Struts2的有两种方法可以实现:
(1)、利用HttpServletResponse对象的response实例,Java代码如下:
String text="true";
if(memberService.findByUsername(member.getUsername()) != null){
text="false";//如果用户名已存在,则输出false
}
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/plain;charset=UTF-8");
response.getWriter().write(text);
return null;
struts.xml配置:可以不用配置<result>输出项。本方法的缺点是依赖于HttpServletResponse。
(2)、使用Struts2的stream返回类型:
Boolean canSign = true;
// 数据库中是否存在该用户名
if (memberService.findByUsername(member.getUsername()) != null) {
canSign = false;// 表示存在,要返回false
}
inputStream = new ByteArrayInputStream(canSign.toString().getBytes()); //将true或者false转化为流,要为inputStream提供getter方法。
return SUCCESS;
struts.xml配置:
<result type="stream">
<param name="contentType">text/plain</param>
<param name="inputName">inputStream</param>
</result>
以上的contentType不能使用text/html类型,也可以不用配置该项,默认就是text/plain类型。