【问题标题】:three Dynamic Drop Down List from database in a single form with action of form三个动态下拉列表来自数据库的单个表单,带有表单操作
【发布时间】:2017-06-29 16:29:26
【问题描述】:

当我在动态下拉列表中使用onchange="this.form.submit()" 方法时,依赖于另一个 整个表单提交了怎么办给我一些建议

当我删除表单操作时,它只会下拉,但我怎样才能从表单中获取数据到数据库

register.jsp

    <%@page import="java.sql.*"%>
<%@ 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">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Register to House in Rent India</title>
<link rel="stylesheet" type="text/css" href="styleraika.css">
</head>
<body>
<div class="ctn">
<form action="register" method="post" id="rg" name="rg">
<div class="register_label">State</div>

<select class="register_text" name="stat" id="stat" onchange="this.form.submit()">
<option value="">Select State</option>
<%
try
{
    String sql="select * from state";
    Class.forName("com.mysql.jdbc.Driver").newInstance();
    Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/raika","root","mysql");
    Statement stmt=con.createStatement();
    ResultSet rs=stmt.executeQuery(sql);

while(rs.next())
{
%>

<option value="<%=rs.getInt("sid")%>"
<%
if(request.getParameter("stat")!=null)
{
    if(rs.getInt("sid") == Integer.parseInt(request.getParameter("stat")))
    {
        out.print("selected");
    }
}

%>
><%=rs.getString("state")%></option>
<%
    }
}


catch(SQLException e)
{
    e.printStackTrace();
}

%>

</select>



<div class="register_label">District</div>
<select class="register_text" name="dist" id="dist">
<option value="">Select District</option>
<%
String n=request.getParameter("stat");
try
{
    String sql="select * from dist where sid=?";
    Class.forName("com.mysql.jdbc.Driver");
    Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/raika","root","mysql");

    PreparedStatement ps=con.prepareStatement(sql);
    ps.setString(1, n);

    ResultSet rs=ps.executeQuery();
    while(rs.next())
    {
%>
    <option value="<%=rs.getString(1)%>"><%=rs.getString(2)%></option>
<%
    }
}
catch(SQLException e)
{
    e.printStackTrace();
}

%>

</select>

<div class="register_label">Local Area</div>
<input type="text" class="register_text" name="local" id="local">

<center>

<input type="submit" value="Register" class="reg_btm">
<input type="button" value="Reset" class="reg_btm" onclick="reset()">

</center>
</form>
</div>

<script>
function reset() {
    document.getElementById("rg").reset();
}
</script>

</body>
</html>

Servlet 代码

package demo;

import java.io.IOException;
import java.sql.DriverManager;
import java.sql.SQLException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;

/**
 * Servlet implementation class Register
 */
@WebServlet("/register")
public class Register extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public Register() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        String local=request.getParameter("local");
        int s=Integer.parseInt(request.getParameter("stat"));
        String dist=request.getParameter("dist");
        String state1=request.getParameter("stat");


        try{

            Class.forName("com.mysql.jdbc.Driver");
            Connection con=(Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/demo","root","mysql");
            String sql="INSERT INTO location (state,dist,local) VALUES (?,?,?);";

            PreparedStatement ps=(PreparedStatement) con.prepareStatement(sql);

            ps.setString(1, state1);
            ps.setString(2, dist);
            ps.setString(3, local);
            ps.executeUpdate();

            ps.close();

            String sql2="INSERT INTO local (did, local) VALUES (?,?);";
            PreparedStatement ps2=(PreparedStatement) con.prepareStatement(sql2);
            ps2.setInt(1, s);
            ps2.setString(2, local);
            ps2.executeUpdate();
            //pw.println("Data Inserted successfully..........");
            response.sendRedirect("success.jsp");

        }
        catch(ClassNotFoundException e)
        {
            e.printStackTrace();
        }
        catch(SQLException e)
        {
            e.printStackTrace();
        }
    }

    @Override  
    protected void doGet(HttpServletRequest request, HttpServletResponse response)  
    throws ServletException, IOException {  
    processRequest(request, response);  
    }      

    protected void doPost1(HttpServletRequest request, HttpServletResponse response)  
    throws ServletException, IOException {  
    processRequest(request, response);  
    }  

    private void processRequest(HttpServletRequest request, HttpServletResponse response) {
        // TODO Auto-generated method stub          
    }

    @Override  
    public String getServletInfo() {  
    return "Short description";  
    } 
}

【问题讨论】:

  • 请解释清楚你遇到了什么问题。
  • 我想知道的是,当我给出表单操作时,函数 onChange=" this.form.submit()" 直接与 servlet 联系,但我想保留该值并将其发送到servlet 当我单击提交按钮但当我删除有效但无法调用 servlet 的表单操作时,请给我一些建议

标签: forms jsp servlets


【解决方案1】:

你应该这样做:

<form action="register" method="post">
    <select class="register_text" name="stat" id="stat">

          /** skipping your java code **/

         <option value="Desired_Value_Here"> </option>

    </select>

    <select class="register_text" name="dist" id="dist">

          <option value="Desired_Value_Here"> </option>

    </select>

    <input type="submit" value="" class="" />
</form>

您不需要 onChange 事件,当您按下提交按钮时,此表单将被提交并会触发您的 servlet。您将在 servlet 中执行的操作是:

String yourStat = request.getParameter("stat");
//for getting selected value from the first select tag
String yourDist = request.getParameter("dist");
//for getting selected value from the second select tag

这就是你需要做的所有事情。

我会建议您将 JavaScript 放在外部(单独的 .js 文件)中并使用 表达式语言,以便您的代码变得可读。

【讨论】:

  • 我试试这个仍然不工作 dist 值不会再出现
  • 下拉列表是可靠的,如果在 javascript 中可以从数据库中检索,那么代码是什么谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-05
  • 2015-10-25
  • 2021-07-23
  • 2010-11-22
  • 1970-01-01
相关资源
最近更新 更多