问题
今天遇到个bug,后端使用request.setAttribute("key", value);
将startDate
、endDate
两个日期字符串传递到jsp中,使jsp可以获取到日期进行查询操作。但接口拼接的参数startDate
为2017
,endDate
为1986
,让人百思不得其解。
request.setAttribute("startDate", "2024-06-01");
request.setAttribute("endDate", "2024-07-31");
尝试将jsp中 var startTime = ${startDate}; var endTime = ${endDate};
加双引号 var startTime = "${startDate}"; var endTime = "${endDate}";
,发现获取到的值变为正常,但不知其所以然。
原理
不加引号会导致表达式 ${startDate}
和 ${endDate}
被解析为 JavaScript 代码的一部分,而不是字符串。在此问题中,因js中没有加双引号定义传过来的值为字符串,默认js认为是数值类型,将2024-06-01
判断为数值计算,计算后得出2017
.
源码
<script type="text/javascript">
//关闭加载状态
$(top.hangge());
var drugsCode = ${drugsCode};
var supplierCode = ${supplierCode};
var startTime = ${startDate};
var endTime = ${endDate};
layui.use(['table', 'layer'], function () {
var table = layui.table, layer = layui.layer;
table.render({
elem: '#supplierDetail',
url: '/oms/xx/xxx/xxxx/', //
page: {
layout: ['prev', 'page', 'next', 'countPage', 'count', 'skip'], //自定义分页布局
groups: 2,//只显示 1 个连续页码
first: false, //不显示首页
last: false//不显示尾页
},
height: 'full-150',
toolbar: true,
defaultToolbar: ['print'],
limits: [10000],
limit: 10000,
cols: [[{type: 'numbers', title: '序号'},
......
]],
id: 'supplierDetail',
where: {
drugsCode: drugsCode ,
supplierCode: supplierCode ,
startDate: startTime ,
endDate: endTime
},
done: function (res) {
}
});
});
</script>
@Override
public List queryShortageSupplierDetail(String drugsCode, String supplierCode,String startDate, String endDate) {
Map<String,String> param = new HashMap();
param.put("drugsCode",drugsCode);
param.put("supplierCode",supplierCode);
param.put("startDate",startDate);
param.put("endDate",endDate);
return dao.select("AccompanyingOrderMapper.queryShortageSupplierDetail",param);
}