加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

前端数据如何传递给后台布尔类型数据

(2015-10-25 15:28:17)
标签:

365

it

分类: web杂类
前端数据显示:点击多选框时,多选框的值变为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。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有