我有一个JSP页面,其中的表单在按下提交按钮后调用同一页面。在页面中我定义了一个变量x
,最初的值为1,因此它从DB中获取对应于1的数据。现在当按下submit时,x的值增加到2并且数据应该从DB对应新值。我的问题是值增加但数据没有被提取。请告诉我为什么?
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page import="java.io.*" %>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*" %>
<jsp:useBean id="Student" scope="session" class="StudentBean.StudentLoginBean"></jsp:useBean>
<%int x=1; %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>welcome <jsp:getProperty property="login" name="Student" />
</title>
</head>
<body>
<%
try{
Class.forName("com.mysql.jdbc.Driver");
String URL="jdbc:mysql://localhost:3306/OnTest";
Connection con=null;
con=DriverManager.getConnection(URL,"root","root");
PreparedStatement stat=con.prepareStatement("select * from questions where qnNo="+x);
x+=1;
ResultSet rs=stat.executeQuery();
while(rs.next()) {
out.println(x);
out.println(rs.getString(1));%>
<form action="sucess.jsp">
<br><input type ="radio" name ="answer" value="a">
<%
out.println(rs.getString(2));%>
<input type ="radio" name ="answer" value="b">
<%
out.println(rs.getString(3));%>
<input type ="radio" name ="answer" value="a">
<%
out.println(rs.getString(4));%>
<input type ="radio" name ="answer" value="a">
<%
out.println(rs.getString(5));%>
<input type="submit" value="submit" name="submit">
</form>
<%
//System.out.println(rs.getString("name"));
//System.out.println(" "+rs.getString("password"));
//v.addElement(rs.getString("name"));
//v.addElement(rs.getString("name"));
}
if(!con.isClosed()) {
out.println("success");
}
}
catch(Exception e)
{
out.println(e);
}
%>
<h1><h1><h1>i am inside sucess</h1></h1></h1>
</body>
</html>
答案 0 :(得分:0)
如果从视图中分离逻辑,那将是一件好事。
无论如何,在按下提交后,它将重新加载页面,再次将x变量设置为1。
解决方案可以是使用post数据发送x参数然后递增。
<input type="text" name="x" value="${x}" /> <!-- If you're using EL -->
<input type="text" name="x" value="<%=x%>" />
并且
<%
int x = request.getParameter("x");
if(x == null){
x = 1;
}
%>
从视图中分离逻辑我的意思是你应该使用Servlets,你会在网上找到很多文档:)
答案 1 :(得分:0)
将此代码 - <%int x=1; %>
更改为此<%!int x=1; %>
。
问题是:您的x
声明位于本地范围,每次调用.jsp(jsp_servlet)时都会重新初始化。
使用<%! ... %>
可以全局定义x
。
答案 2 :(得分:0)
while(rs.next())
{
out.println(x);
<form action="sucess.jsp">
out.println(rs.getString(1));%>
<br><input type ="radio" name ="answer" value="a">
<%
out.println(rs.getString(2));%>
<input type ="radio" name ="answer" value="b">
<%
out.println(rs.getString(3));%>
<input type ="radio" name ="answer" value="c">
<%
out.println(rs.getString(4));%>
<input type ="radio" name ="answer" value="d">
<%
out.println(rs.getString(5));%>
<input type ="radio" name ="answer" value="e">
<input type="submit" value="submit" name="submit">
</form>
<%
//System.out.println(rs.getString("name"));
//System.out.println(" "+rs.getString("password"));
//v.addElement(rs.getString("name"));
//v.addElement(rs.getString("name"));
}
更改这些值,您将获得解决方案。实际上,你没有在Form方法中做第一个,所以它的表现不同。