問題
今天遇到個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>
@Overridepublic 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);}