使用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”是固定的寫法。
