1

我有一个带有表单的 JSP 页面,它在按下提交按钮后调用同一页面。在页面中,我定义了一个变量x,最初的值为 1,因此它从对应于 1 的 DB 中获取数据。现在,当按下提交时,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>
4

3 回答 3

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 方法中执行第一个操作,因此它的行为有所不同。

于 2013-02-27T11:30:45.913 回答
0

如果您将逻辑与视图分开,那将是一件好事。

无论如何,按下提交后它将重新加载页面,再次将 x 变量设置为 1。

一种解决方案可能是发送带有发布数据的 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,你会在网上找到很多文档:)

于 2013-02-27T11:09:52.183 回答
0

将此代码更改<%int x=1; %>为 this <%!int x=1; %>

问题是:您的x声明在本地范围内,每次调用 .jsp (jsp_servlet) 时都会重新初始化。

通过使用<%! ... %>x可以在全球范围内定义。

于 2013-02-27T11:16:34.973 回答