一个response.sendRedirect莫名其妙的问题--详情请进?
遇到的情况时,删除多条纪录之后response.sendRedirect返回index.jsp,结果显示
只有一条纪录被删除(再刷新一次显示正确,察看数据库发现所选记录实际上都被删除了)。程序如下
index.jsp //显示数据,提交要删除的数据
<%
response.setHeader("Cache-Control","no-store");
response.setHeader("Pragma","no-cache");
response.setDateHeader("Expires",0);
%>
<html>
<head>
<script>
function adddata()
{
var wid=Math.round((screen.Width-200)/2)
var ht=Math.round((screen.Height-200)/2)
var url="adddata.htm";
window.open(url,"添加","top="+ht+",left="+wid+",toolbar=0,directories=0,menubar=0,status=0,resizable=0,height=120,width=400");
}
</script>
<%@ page contentType="text/html;charset=gb2312" %>
<title>My FAQ0.9!!</title>
</head>
<body>
<center>
<p><h3><b>这是我的FAQ!</b></h3></p>
<table>
<tr>
<td>
<input type="button" value="点击这里添加FAQ!" onclick="adddata()">
</td>
</tr>
</table>
<form method="post" action="deldata.jsp" name="form" id="form" onsubmit="return check()">
<%@ page language="java" import="java.sql.*" %>
<jsp:useBean id="workM" scope="page" class="test.faq"/>
<%
ResultSet RS=workM.executeQuery("SELECT * FROM faqs");
String tt;
int num;
int id=1;
out.print("<table border=0 width=\"75%\">");
out.print("<tr><td><hr noshade size=\"1\"></td></tr>");
while(RS.next())
{
tt=RS.getString("answers");
num=RS.getInt("id");
out.print("<tr align=\"center\">");
out.print("<td>"+(id++)+".");
out.print(RS.getString("subject"));
out.print("<pre>"+tt+"</pre></td>");
out.print("<td>删除<input type=checkbox name=\"id"+num+"\" value=\""+num+"\" id=\"id\"></td></tr>");
}
out.print("</table>");
RS.close();
%>
<input type="submit" value="点击这里删除FAQ!">
</form>
</body>
</html>
index.jsp用的javabean是//连接faq(access)
test.java:
package test;
import java.sql.*;
public class faq{
String sDBDriver="sun.jdbc.odbc.JdbcOdbcDriver";
String sConnStr="jdbc:odbc:faq";
Connection conn=null;
ResultSet rs=null;
public faq(){
try{
Class.forName(sDBDriver);
}
catch(java.lang.ClassNotFoundException e)
{
System.err.println("faq(): "+e.getMessage());
}
}
public ResultSet executeQuery(String sql){
rs=null;
try
{
conn=DriverManager.getConnection(sConnStr);
Statement stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
}
catch(SQLException ex)
{
System.err.println("aq.executeQuery: "+ex.getMessage());
}
return rs;
}
}
提交后
deldata.java
<%@ page language="java" import="java.sql.*" %>
<jsp:useBean id="delM" scope="page" class="del.del"/>
<%
java.util.Enumeration e;
java.lang.String id;
e=request.getParameterNames();
while(e.hasMoreElements())
{
String name=(String)e.nextElement();
id=request.getParameter(name);
delM.execdel(id);
}
%>
<%response.sendRedirect("index.jsp");%> //??
用的bean是
ackage del;
import java.sql.*;
public class del{
String sDBDriver="sun.jdbc.odbc.JdbcOdbcDriver";
String sConnStr="jdbc:odbc:faq";
Connection conn1=null;
PreparedStatement pstmt=null;
int rowcount;
public del(){
try{
Class.forName(sDBDriver);
}
catch(java.lang.ClassNotFoundException e)
{
System.err.println("del(): "+e.getMessage());
}
}
public void execdel(String id){
try
{
conn1=DriverManager.getConnection(sConnStr);
pstmt=conn1.prepareStatement("DELETE FROM faqs WHERE id=? ");
pstmt.setString(1,id);
rowcount=pstmt.executeUpdate();
//pstmt.close();
//conn.close();
}
catch(SQLException ex)
{
System.err.println("del.executeUpdate: "+ex.getMessage());
}
}
}