【问题标题】:Variable in JSP is not increasingJSP中的变量没有增加
【发布时间】:2013-02-27 11:04:43
【问题描述】:

我有一个 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>

【问题讨论】:

    标签: java mysql database jsp increment


    【解决方案1】:

    将此代码 - &lt;%int x=1; %&gt; 更改为此 &lt;%!int x=1; %&gt;

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

    通过使用&lt;%! ... %&gt;,您的x 可以在全球范围内定义。

    【讨论】:

      【解决方案2】:

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

      无论如何,按下提交后它会重新加载页面,再次将 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,你会在网上找到很多文档:)

      【讨论】:

      • 请告诉我该怎么做?
      • 编辑了答案。类似的东西应该可以工作,我没有测试过,所以我不确定它会运行没有任何错误
      【解决方案3】:
      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 方法中执行第一个操作,因此它的行为有所不同。

      【讨论】:

        猜你喜欢
        • 2022-01-20
        • 2021-08-27
        • 2019-10-23
        • 1970-01-01
        • 1970-01-01
        • 2013-07-13
        • 1970-01-01
        • 2014-01-23
        • 1970-01-01
        相关资源
        最近更新 更多