先貼出來簡單得不能再簡單的demo頁面效果:javascript
以下是spring mvc的Controller:html
@RequestMapping("mytest") @Controller public class ZhangTestController { private Logger log = LogManager.getLogger(); @RequestMapping(value = "toCancel") public String toCancel( HttpServletRequest request, HttpServletResponse response, String orderNo){ log.info("orderNo={}",orderNo); request.setAttribute("orderNo", null); return "mytest/toCancel"; } }
以下toCancel.jsp頁面,java
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <%@ page contentType="text/html;charset=UTF-8" %> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <script type="text/javascript" src="${pageContext.request.contextPath}/static/yimei/js/jquery-1.10.2.js"></script> <script type="text/javascript"> $(document).ready(function () { $("#chargeQuery").click(function () { $("#inputForm").submit(); }); }); </script> </head> <body> <form id="inputForm" action="" method="post" class="form-horizontal"> <input type="text" name="orderNo" id="orderNo" value="${orderNo}"/> </form> <span class="buyer pay-credit" id="chargeQuery">取消訂單</span> </body> </html>
如上,當經過瀏覽器訪問http://localhost:8083/mytest/toCancel?orderNo=123,經過log可知打印出來的orderNo=123,這沒什麼可質疑的。jquery
but,而後,再點擊頁面上的「取消訂單」,打印出來的日誌你猜是什麼?好奇的你,想知道答案就Ctrl+A吧~~orderNo=123,nullweb
是否是徹底出於你的意料?!spring
如何解釋這種狀況?sql
個人理解:servlet在解析請求參數的值時,會經過逗號拼接全部地方的請求。本例orderNo參數的取值,包括get方式的orderNo參數,還包括form表單裏的name="orderNo"域的值,因此,點擊按鈕事件時,orderNo參數的值是「123,null」。瀏覽器
今天在對生產排障時,奇怪的發現,查單的sql語句裏,orderNo的值是「123,null」或「123,123」,最後發現原來是頁面和webcontroller交互處理不當致使的。本文記錄下來,以備園子裏其餘同窗作參考。mvc