2010-12-10 7 views
1

J'ai une page JSP qui interroge une base de données mysql, je veux envoyer l'objet Resultset à une page html en tant qu'objet de réponse? J'ai besoin de l'objet resultset pour remplir une table et un graphique.comment envoyer un objet ResultSet dans jsp revenir à html (javascript)?

1. Comment est-ce que je jette l'objet resultSet dans un objet javascript?

  1. comment puis-je envoyer un objet ResultSet de jsp html? (Je veux dire la syntaxe)

J'utilise obtenir XMLHttpRequest pour appeler la page jsp

Répondre

3

Ne pas utiliser JSP. Utilisez un servlet qui interroge la base de données, obtient un List avec les résultats et le convertit en une chaîne JSON que JS peut utiliser de façon transparente.

Créez d'abord une classe javabean qui représente une seule ligne de la table DB. Par exemple. Product.

public class Product { 
    private Long id; 
    private String name; 
    private String description; 
    private BigDecimal price; 

    // Add/generate c'tors, getters, setters and other boilerplate. 
} 

La créer une classe de DAO qui déclenche la requête et mappe le ResultSet à un List<Product>.

public class ProductDAO { 

    // ... 

    public List<Product> find(String search) throws SQLException { 
     Connection connection = null; 
     PreparedStatement statement = null; 
     ResultSet resultSet = null; 
     List<Product> products = new ArrayList<Product>(); 

     try { 
      connection = database.getConnection(); 
      statement = connection.prepareStatement(SQL_FIND); 
      statement.setString(1, search); 
      resultSet = statement.executeQuery(); 
      while (resultSet.next()) { 
       Product product = new Product(); 
       product.setId(resultSet.getLong("id")); 
       product.setName(resultSet.getString("name")); 
       product.setDescription(resultSet.getString("description")); 
       product.setPrice(resultSet.getBigDecimal("price")); 
       products.add(product); 
      } 
     } finally { 
      if (resultSet != null) try { resultSet.close(); } catch (SQLException logOrIgnore) {} 
      if (statement != null) try { statement.close(); } catch (SQLException logOrIgnore) {} 
      if (connection != null) try { connection.close(); } catch (SQLException logOrIgnore) {} 
     } 

     return products; 
    } 
} 

Ensuite, créez une classe Servlet qui utilise la classe DAO pour obtenir les produits et il se transforme en une chaîne JSON avec un peu d'aide de Google Gson.

public class ProductServlet extends HttpServlet { 

    // ... 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     try { 
      List<Product> products = productDAO.find(request.getParameter("search")); 
      response.setContentType("application/json"); 
      response.setCharacterEncoding("UTF-8"); 
      response.getWriter().write(new Gson().toJson(products)); 
     } catch (SQLException e) { 
      throw new ServletException("DB error", e); 
     } 
    } 
} 

Plan servlet web.xml sur un url-pattern de /products et l'appeler en JavaScript comme suit (j'utilise jQuery car il élimine boilerplate crossbrowsersensitive de sorte que vous vous retrouvez avec 10 fois moins de code JavaScript).

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <title>SO question 4407861</title> 
     <script src="http://code.jquery.com/jquery-latest.min.js"></script> 
     <script> 
      $(document).ready(function() { 
       $('#searchform').submit(function() { 
        $.getJSON("products", $(this).serialize(), function(products) { 
         var table = $('#resulttable'); 
         $.each(products, function(index, product) { 
          $('<tr>').appendTo(table) 
           .append($('<td>').text(product.id)) 
           .append($('<td>').text(product.name)) 
           .append($('<td>').text(product.description)) 
           .append($('<td>').text(product.price)); 
         }); 
        }); 
        return false; 
       }); 
      }); 
     </script> 
    </head> 
    <body> 
     <form id="searchform"> 
      <input type="text" name="search"> 
      <input type="submit"> 
     </form> 
     <table id="resulttable"></table> 
    </body> 
</html> 
+0

merci pour les extraits de code, ça m'a vraiment aidé – sanre6

Questions connexes