1

送信ボタンが押された後に同じページを呼び出すフォームを持つJSPページがあります。このページでは、最初は値1の変数を定義しているxため、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

ロジックをビューから分離するのは良いことです。

とにかく送信を押した後、ページをリロードし、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;
    }
%>

ビューからロジックを分離することで、サーブレットを使用する必要があることを意味します。オンラインで多くのドキュメントを見つけることができます:)

于 2013-02-27T11:09:52.183 に答える
0

このコードを変更します-<%int x=1; %>これに<%!int x=1; %>

問題は次のとおりです。x宣言はローカルスコープにあり、.jsp(jsp_servlet)を呼び出すたびに再初期化されます。

<%! ... %>あなたを使用することにより、xグローバルに定義することができます。

于 2013-02-27T11:16:34.973 に答える
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 に答える