問題是在一個群里看到的,通過自己查找和實驗,參考網上的博文,將問題列出來。以幫助后來者和共同交流學習。
博文地址:
http://blog.sina.com.cn/s/blog_13c30757a0102w35i.html
*******************************************************************
前端數據顯示:點擊多選框時,多選框的值變為1,未選中時值為0
function parseData(obj){
if(obj.value=='1'){
obj.value='0';
}else{
obj.value='1';
}
}
前端數據傳遞:var isPublic=$("input[name='isPublic']").val();
后台數據源類型:private Boolean isPublic;
后台接收數據類型:不管前端的值傳遞的值是0還是1,isPublic的值都為false。
錯誤原因:
前端將數據傳遞到后台都是這種格式/device/addDevice?isPublic=0,
而且傳遞的參數不管在前端是什么類型,在http請求中的數據都是字符串類型,所以java后台是將字符串isPublic的值轉化為布爾型,但在java中String轉化為boolean型的規則為:
除忽略大小寫的true字符串的布爾轉化值為true外,其它的都為false。所以前端傳輸數據0或者1,解析后的結果都為false。
解決辦法:
前端數據顯示:
function parseData(obj){
if(obj.value=='1'){
obj.value='';
}else{
obj.value='1';
}
}
前端數據傳遞:var isPublic=Boolean($("input[name='isPublic']").val());
解決原理:
在javascript中所有的字符串除了""即空字符外,其它字符串均為true,所以多選框未點擊時值為"",轉化為布爾值為false,傳遞http請求時為"false",后台解析也為false;同理多選框點擊時值為"1",轉化為布爾值為true,傳遞http請求時雖為"
true",但后台解析后就會變為true。