Struts2中的json响应
使用struts2进行web开发时,我们需要对表单中用户的输入进行验证,这时客户端需要发送ajax请求,而服务器端需对客户端的请求进行响应,这时我们常常会用到json。以邮箱验证为例,需进行如下4步:
1、在jsp页面的表单中定义<input name="user.email" type="text" id="txtEmail"/>用于接收用户输入的邮箱。
2、引入jquery,写一段js代码,当此文本框失去焦点时用于发送ajax请求
$(function(){
$('#txtEmail').blur(function(){
var reg = /^\w+([-+.]\w+)*@\w+([-.]\w+)*.\w+([-.]\w+)*$/;
var email = $('#txtEmail').val();
if(email == ""){
$('#email\\.info').html("邮箱不能为空");
return;
}
if(reg.test(email)){
$.post(
'应用名/命名空间/email.action',//与struts.xml配置文件中的action名保持一致
{"email":email},
function(data){
if(data){
$('#email\\.info').html("邮箱可以使用");
flag.email = true;//用于约束表单是否能够提交
}else{
$('#email\\.info').html("邮箱被占用");
}
}
);
}else{
$('#email\\.info').html("邮箱不正确");
}
});
});
3、服务器端写一个action用于响应客户端发送的请求,
public class EmailAction {
private String email;
private boolean ok;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public boolean isOk() {
return ok;
}
public void setOk(boolean ok) {
this.ok = ok;
}
public String execute() throws Exception{
UserDAO dao = new JdbcUserDAO();
User user = dao.findByEmail(email);
if(user != null){
ok = false;//邮箱被占用
}else{
ok = true;//邮箱可以使用
}
return "success";
}
}
其中email属性用于接收客户端用户输入的邮箱,ok用于判断客户端输入的邮箱是否已经存在,当ok = false时表示邮箱已被使用,不能通过验证,反之则表明邮箱可以使用。同时,在action中一定要提供属性的get/set方法。
4、写struts.xml配置文件,将写好的action配置到服务器中,这一步是最重要最关键的一步
<action name="email" class=" action.user.EmailAction">
<result name="success" type="json">
<param name="root">ok</param>
</result>
</action>
其中<result>中一定要将type规定为json,同时加入<param>组件,规定传递的为ok属性,如果没有加入<param>在部署该应用时会报警告no default parameter defined for result of type json(没有为json响应类型定义默认的参数),此时客户端接收到的就不仅仅是ok属性而是所有action中的属性,在客户端alert返回的数据会显示object,但是加入<param name=”root”>ok</param>返回的数据中就只有ok,alert时显示的内容就是true或者false,这里需要注意的是<param name=”root”>ok</param>中name=”root”是固定的写法。