在jsp页面

时间:2016-05-24 16:17:40

标签: jsp servlets resultset

我需要帮助在jsp页面中的复选框值附近动态显示文本框,而不使用JSTL实现。

工作流程

1.用户在复选框中输入值并单击搜索按钮

2.点击搜索,调用servlet。 servlet专注于数据库实现,并将结果集值转发到请求所在的同一jsp页面。

3.结果集值以jsp页面中的复选框的形式显示。在每个复选框附近都应显示一个文本框。

问题:

结果集值以jsp页面中的复选框的形式显示。但是我需要在我的jsp页面中动态地在我的复选框值附近添加一个文本框。如果我有3个复选框,则应在jsp页面中的3个复选框值中显示一个文本框。

这是我的代码。

Productlist.jsp

<%@page import="java.util.List"%>
<%@page import="web.Products"%>
<%@page import="java.util.ArrayList"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
       <title>Products</title>
</head>

<body>
 <form method="post" align="center" action="ProductList">

Company Name:<input type="text" size="20" id="company" name="company" />
<input type="submit" value="search"/>
  <%
  List<Products> pdts = (List<Products>) request.getAttribute("list");
  if(pdts!=null){
for(Products prod: pdts){
       out.println("<input type=\"checkbox\" name=\"prod\" value=\"" + prod.getProductname() + "\">" + prod.getProductname() + "<br>");
     }
 }
%>

</form>
</body>
</html>

Servlet代码

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpSession;


public class ProductList extends HttpServlet {

    static final String dbURL = "jdbc:mysql://localhost:3306/pdt";
    static final String dbUser = "root";
    static final String dbPass = "root";

    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8"); 
        PrintWriter out = response.getWriter();
        ResultSet rs = null;
        Connection connection = null;   
        List<Products> pdt = new ArrayList<Products>();

        try{
            String company =request.getParameter("company");
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection (dbURL,dbUser,dbPass);
            String sql="select product_pck from comp_pdt_list where company_name='"+company+"'";
            PreparedStatement prep = connection.prepareStatement(sql); 
            rs=prep.executeQuery();
if(rs!=null)
 {
while(rs.next()) 
  { 
    Products prod=new Products();
      prod.setProductname(rs.getString("product_pck"));
      pdt.add(prod);
}
       request.setAttribute("list",pdt);

            RequestDispatcher rd=request.getRequestDispatcher("Productlist.jsp");    
                    rd.forward(request,response); 
                    return;
 }
prep.close();

       }
     catch(Exception E){
//Any Exceptions will be caught here
System.out.println("The error is"+E.getMessage());

    }  

        finally {
            try {
                connection.close();
            } 
        catch (Exception ex) {
                System.out.println("The error is"+ex.getMessage());
            }
                }

}

}

1 个答案:

答案 0 :(得分:0)

我得到了解决方案。

我们可以在for循环中显示文本框,而不是使用if条件,以便根据结果集大小在复选框值附近动态显示文本框。

这是代码

    <td> <b>
    <%
      List<Products> pdts = (List<Products>) request.getAttribute("list");
      if(pdts!=null){
        for(Products prod: pdts){
           out.println("<input type=\"checkbox\" name=\"prod\" value=\""  + prod.getProductname() + "\">"  + prod.getProductname()+"<br>");
            } 
      %> 
    </b></td>   

    <td>  
   <%
    for(Products prod: pdts){
            out.println("<input type=\"text\" name=\"free\" style=\"width:50px; height:22px\"/><br/>"); 
        } }
   %> 
</td>