2016-06-08 67 views
0

我正在開發一個簡單的應用程序與Eclipse和Apache,其中我顯示一個與MySQL有關的產品(與列id,名稱和價格)使用Java創建的表,JSP和HTML。我還有一個帶有按鈕的文本框,它允許過濾僅顯示比文本框中插入的產品價格更高的產品的表格。簡單的Java Web應用程序:在啓動時不加載表

似乎一切都工作正常,包括過濾器。但是,當我第一次運行該應用程序時,整個表格不會像顯示它應該那樣顯示。它僅在我使用過濾器時顯示。我不確定,但過濾元素和表格的scriptlet之間似乎存在一些衝突,因爲如果我在JSP文件中註釋過濾元素的scriptlet,表就會在啓動時加載它。

這是它加載表和搜索元件(有一些引導造型)爲JSP類的代碼:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1" import="java.sql.Connection,java.sql.ResultSet,java.sql.DriverManager,project1.components.DBConnector, project1.components.Filter"%> 
<!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>Product</title> 
<style type="text/css"> 
    <%@include file="bootstrap/css/bootstrap.css" %> 
    <%@include file="bootstrap/css/bootstrap-theme.css" %> 
</style> 
<meta name="viewport" content="width=device-width, initial-scale=1.0"> 
<script src="bootstrap/js/jquery.js"></script> 
<script src="bootstrap/js/bootstrap.js"></script> 
</head> 
<body> 
<% 
DBConnector dbc = new DBConnector(); 
Connection conn = dbc.connect(); 
String query = "select * from product"; 
%> 
</body> 

<form method="post"> 

<div class="col-xs-2 col-xs-offset-5"> 
<input type="text" class="form-control" name="value" value=<%=request.getParameter("firstinput")%>> 
<br><br> 
<input type="submit" class="form-control" name="submit" value="Filter"> 
<% 
    if(!request.getParameter("value").isEmpty()){ 
     String val = request.getParameter("value"); 
     Filter ft = new Filter(); 
     query = ft.filterByValue(val); 
    } 
%> 
</div> 
<br></br> 
<table class = 'table table-hover'> 
<tr> 
<td>Id</td> 
<td>Name</td> 
<td>Product</td> 
</tr> 
<% 
try 
{    
    ResultSet rs = dbc.obtainTable(query); 

    while(rs.next()) 
{ 

%><tr> 
    <td><%=rs.getInt("ID") %></td> 
    <td><%=rs.getString("NAME") %></td> 
    <td><%=rs.getFloat("PRICE") %></td> 
    </tr>  <% 

} 
%> 
    </table> 
    <% 
    rs.close(); 
    conn.close(); 
    } 
catch(Exception e) 
{ 
    e.printStackTrace(); 
    } 




%> 

</form> 

</html> 

,其連接到數據庫,並且獲得的數據與給定的查詢中的Java類是裝上在前面的JSP文件中定義的表:

package project1.components; 

import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 

import com.mysql.jdbc.Connection; 
import com.mysql.jdbc.Statement; 

public class DBConnector { 

    String url = "jdbc:mysql://localhost:3306/products?autoReconnect=true&useSSL=false"; 
    String user = "root"; 
    String pass = "root"; 

    public Connection connect() throws ClassNotFoundException, SQLException{ 
     Class.forName("com.mysql.jdbc.Driver"); 
     return (Connection) DriverManager.getConnection(url,user,pass); 
    } 

    public ResultSet obtainTable(String query) throws ClassNotFoundException, SQLException{ 
     Connection cn = this.connect(); 
     Statement stmt= (Statement) cn.createStatement(); 
     return stmt.executeQuery(query); 
    } 
} 

最後,本身在Java中定義的過濾器:

package project1.components; 

import java.sql.ResultSet; 
import java.sql.SQLException; 

public class Filter { 

    public String filterByValue(String val) throws ClassNotFoundException, SQLException{ 
     int num = Integer.parseInt(val); 
     String query = null; 
     if(num >= 0){ 
      query = "select * from product where price >" + val; 
     } 
     else{ 
      query = "select * from product"; 
     } 
     return query; 
    } 
} 

任何幫助將非常感激。

回答

0

能否請您替換以下:

if(!request.getParameter("value").isEmpty()){

由:

if(request.getParameter("value")!=null && !request.getParameter("value").trim().isEmpty()){

和看到的結果?

+0

它現在有效。謝謝! –

+0

Hi @ B.Pal歡迎您!你能否接受答案,以便你的問題的讀者知道哪個答案是正確的,否則他們沒有線索。 –

相關問題