昨天使用数据库中的一段字段在jsp一个下拉列表<select></select>,然后选中该列表中某个项后,再去Servlet中去数据库查找相对应的数据进行表格显示,并将Servlet中获取到的刚刚选中项作为<select>列表中的缺省选中项刷新jsp页面。后来发现有时候下拉列表中会把选中的项作为缺省默认选中项,有时候不行,最开始怀疑是否是因为我在jstl中使用==来进行字符串判断的问题,后来发现不是,原来是最开始选中项的值与后来经过Servlet放回的值差个空格,从而导致==两边不一致,导致刚刚那个问题。
后来想想原因大概是这样的,
在Servlet中使用request.getParameter是自动将空格过滤掉,而在数据库mysql中空格是被忽略掉的,也就是你使用name="aa"和name="aa "是一样的,查询出来的结果也是一样的。
因此,以后在将数据存入数据库中,最好是要将前后空格都去掉,避免发生刚刚这种莫名其妙的问题。
--------------------------------------------------------------------------------------
刚刚又去测试了一下,发现上面的原因描述有点小问题,如果你使用form表单的post, action进行提交带有空格的值时,使用request.getParameter获取到的值,依然可以有空格,此时是可以的。
如果你使用的是window.location.href这种方式提交请求的时候,该空格会自动被去掉的。也就是request.getParameter获取到的值是没有空格的。
各位如果有时间可以运行下下面这段代码,就能立即明白:
first.jsp
<%@ page contentType="text/html;charset=UTF-8"%>
<%@ page import="java.util.*" %>
<html>
<body>
<%
String name = request.getParameter("name");
if (name != null) {
%>
<%=name%>aaa
<%
}
%>
<form action="first.jsp" method="get">
<input type="text" name="name" value="123 " />
<input type="submit" name="submit" />
<input type="button" onclick="mysubmit('123 ')" value="getTest">
</form>
<script>
function mysubmit(name) {
alert(name+"aa");
window.location.href='first.jsp?name='+name;
}
</script>
</body>
</html>