zoukankan      html  css  js  c++  java
  • <正则吃饺子> :关于前端往后端传递布尔值参数的问题

    问题是在一个群里看到的,通过自己查找和实验,参考网上的博文,将问题列出来。以帮助后来者和共同交流学习。
     
    博文地址: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。
  • 相关阅读:
    C#模拟POST表单提交 WebClient
    视频广告屏蔽器(附下载地址)
    SQL Server 不同数据库导入指定数据解决方案
    WinRAR(WinZip)压缩与解压实现(C#版Window平台)
    Visual Studio 扩展包(.vsix)制作
    ORM for Net主流框架汇总与效率测试
    文件删除小助手
    C# 控制台应用程序输出颜色字体[更正版]
    IE与IE内核浏览器的那点事
    where in的sql语句按照指定ID进行排序的解决方法
  • 原文地址:https://www.cnblogs.com/zhengzeze/p/7026142.html
Copyright © 2011-2022 走看看