1.背景:
我们都知道<select>控件是下拉选择框,在JSP中当我们选中其中某一项提交后,被选中的值会提交到Servlet类里进行处理。而当再返回某个跟提交页类似的页时,页面上有个同样的<select>,选择框里的几项是从数据库里某个表读出来的,这时不用HttpSession加以处理,select控件中的值的顺序还是数据库那个表里的顺序,而不是我们选择的那个值了,下面就让我们来解决这个问题吧。
2.Session解决:
表单1:
<%
DBManager db=new DBManager();
String sql="select * from s";
ResultSet rs=db.executeQuery(sql);
%>
<form action="Servlet" method="post">
<div class="e"><select name="E">
<%
while(rs.next()){
String securityName=rs.getString("name");
out.println("<option value='"+Name+"'>"+Name+"</option>");
}
%>
</select><select name="TimeSelect">
<option value="1 hour">1 hour</option>
<option value='1 year'>1 week</option>
<option value='1 year'>1 month</option>
<option value='1 year'>1 year</option>
</select>
<input type='submit' class="btnIconLeft mr10" value='查询' />
</div>
</form>
<%
if(rs!=null)
rs.close();
db.closeCon();
%>
表单1将两个<select>控件被选的值提交到Servlet类里进行进一步处理,在servlet类里将表单1里选好的两项分别置到Session里,处理完了后跳转到表单2.
表单2:
<form action="Servlet" method="post">
<div class="e"><select name="E">
<%
HttpSession Session=request.getSession();
String name=(String)Session.getAttribute("name");//Session中取出在表单1里第一个<select>选好的选项
String time=(String)Session.getAttribute("time");
out.println("<option value='"+name+"'>"+name+"</option>");//先输出表单1里选好的
while(rs.next()){
String securityName=rs.getString("name");
if(securityName.equals(name))//读数据库,如果是Session里的,则跳过
continue;
out.println("<option value='"+Name+"'>"+Name+"</option>");
}
%>
</select>
<select name="TimeSelect">
<%
out.println("<option value='"+time+"'>"+time+"</option>");
if(!"1 hour".equals(time))
out.println("<option value='1 hour'>1 hour</option>");
if(!"1 week".equals(time))
out.println("<option value='1 week'>1 week</option>");
if(!"1 month".equals(time))
out.println("<option value='1 month'>1 month</option>");
if(!"1 year".equals(time))
out.println("<option value='1 year'>1 year</option>");
%>
</select>
<input type='submit' class="btnIconLeft mr10" value='查询' />
</div>
</form>
注:
表单1里有两个<select>和一个提交按钮,并且第一个select元素的选项是从某个数据库的表里选出来的。当我们选好这两项后点击提交,到Servlet类里进行处理,将在表单1里选好的两项置到Session中,处理完毕后跳转到表单2。这时,为了让表单2最先显示我们在表单1里选择的那两项,就采取了Session的方法。即从Session中拿出这两个选项,先输出,然后while循环里读数据库的那些如果有Session里那项就continue跳过。