一个response.sendRedirect莫名其妙的问题--详情请进?

bblook 2001-08-10 09:31:42
遇到的情况时,删除多条纪录之后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());
}
}

}
...全文
141 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ls 2001-08-18
  • 打赏
  • 举报
回复
KAO,
"
不刷新问题,改为
<%response.sendRedirect("index.jsp?refresh="+(new java.util.Date()));%>
"居然不行,那就改服务器设置吧(如果只是为了骗老板,则把浏览器设置改一改也行);
上面加上一个当前TIME参数的目的是因为TIME值总不一样,当客户端请求时,服务器发现请求页面的参数变了,所以会重新生成一个页面输出给客户端,。。。(我要走了)
ls 2001-08-11
  • 打赏
  • 举报
回复
不刷新问题,改为
<%response.sendRedirect("index.jsp?refresh="+(new java.util.Date()));%>
bblook 2001-08-11
  • 打赏
  • 举报
回复
顶一下吧!:(
hzjf 2001-08-11
  • 打赏
  • 举报
回复
这个问题我也碰到过。
假如用open打开就没事了,到现在还不知道为什么。
:(
(我用的是oracle的开台)
bblook 2001-08-11
  • 打赏
  • 举报
回复
在删除时,多等一阵,再返回就没有这种现象了
在deldata.jsp用下面javascript语句
代替response.sendRedirect.
<head>
<script language="javascript">
function closeWin()
{
window.top.location.replace("index.jsp");
}
</script>
</head>
<body onload="setTimeout('closeWin()',500);">
<center><p>Deleting...,Please Waiting</p></center>
</body>

是不是sendRedirect返回太快,index中的conn只察觉到只有第一个数据被删除的原因?
bblook 2001-08-11
  • 打赏
  • 举报
回复
总要刷新两次才行!:(
bblook 2001-08-11
  • 打赏
  • 举报
回复
还是不行:(

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧