<正則吃餃子> :關於前端往后端傳遞布爾值參數的問題


問題是在一個群里看到的,通過自己查找和實驗,參考網上的博文,將問題列出來。以幫助后來者和共同交流學習。
 
博文地址: 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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM