Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 01:32 Der er 21 kommentarer og
1 løsning

sende array fra jsp side til servlet

Jeg har en webshop, hvor der er nogle bøger i. Men når man går til checkout skal man dernæst indstaste personlige informationer, der herved sendes til en servlet, som så laver en kvitering til kunden og til forretningen der sendes via mail. Dette har jeg styr på. Problemet er at jeg ikke kan få en bestemt parameter for hvert købt Item sendt med i formen til servletten, der herefter kan hente de enekelte bøger fra databasen osv udfra den unikke parameter. Problemet er at jeg skal finde en måde jeg kan rende sessionen igennem for alle bøger og herefter tilføje den enekelte bog antallet af købte til et array eller noget, der så bliver sendt med formen. Forslag ville være rigtig rare.

Her er koden for min Checkout.jsp der viser de vare man har købt , samt den form der skal sende de vigtige informationer og parameter. Formen indeholder kun lige pt navn og adresse. Men skal som sagt også bruge de købte produkter.

_---------------------------------------------------------------

CheckOut.jsp


<%@ page session="true" import="java.util.*, test.Book" %>
<html>
<head>
<title>CheckOut</title>
</head>

<center>
<table border="0" cellpadding="0" width="100%" bgcolor="#FFFFFF">
<tr>
<td><b>Forfatter</b></td>
<td><b>Titel</b></td>
<td><b>Isbn</b></td>
<td><b>Pris</b></td>
<td><b>Antal</b></td>
<td></td>
</tr>
<%
  Vector buylist = (Vector) session.getValue("test.shoppingcart");
  String amount = (String) request.getAttribute("amount");
  for (int i=0; i < buylist.size();i++) {
  Book anOrder = (Book) buylist.elementAt(i);
%>
<tr>
<td><b><%= anOrder.getForfatter() %></b></td>
<td><b><%= anOrder.getTitel() %></b></td>
<td><b><%= anOrder.getIsbn() %></b></td>
<td><b><%= anOrder.getPris() %></b></td>
<td><b><%= anOrder.getAntal() %></b></td>
</tr>
<%}%>
<tr>
<td>    </td>
<td>    </td>
<td><b>Total pris</b></td>
<td><b>Kr.<%= amount %></b></td>
<td>    </td>
</tr>
</table>
<p>
<a href="<%=response.encodeURL("liste?id=1")%>">Køb mere</a>
</center>

<br/>
<br/>


<form name="emailSendForm" action="EmailSendServlet" method="POST">
<table border="0" cellpadding="2">
    <tr>
        <td>Navn:</td>
        <td><input type="text" size="25" name="Navn"></td>
    </tr>
      <tr>
        <td>Efternavn:</td>
        <td><input type="text" size="25" name="EfterNavn"></td>
    </tr>
    <tr>
        <td>Email:</td>
        <td><input type="text" size="25" name="Email"></td>
    </tr>
    <tr>
        <td>Adresse:</td>
        <td><textarea cols="25" rows="5" name="Adresse"></textarea></td>
    </tr>

</table>

_____________________________________________________________________
Mangler alle de nødvendige data der ligger i indkøbskurven, her er tale om isbn og antal på alle varerne der skal medsendes til servletten
_________________________________________________________________
<input type="submit" name="SubmitButton" value="Bestil"></p>
</form>

</body>
</html> 

---------------------------------------------------------------

Se min kommentar i ____________________
Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 08:16 #1
Det hele handle kort og godt om hvordan jeg får nogle af elemeternes data sendt til en servlet fra sessionen
Avatar billede arne_v Ekspert
25. november 2004 - 08:20 #2
servletten har da direkte adgang til sessionen ??
Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 08:24 #3
Ja men jeg ved ikke helt hvordan jeg bruger den til at få fat i de elementer der er blvet tilføjet til sessionen. Har lidt problemer med det
Avatar billede arne_v Ekspert
25. november 2004 - 08:24 #4
request.getSession(false)
Avatar billede arne_v Ekspert
25. november 2004 - 08:25 #5
HttpSession ses = request.getSession(false);
ArrayList kurv = (ArrayList)ses.get("kurv");
Avatar billede arne_v Ekspert
25. november 2004 - 08:26 #6
Sludder

HttpSession ses = request.getSession(false);
ArrayList kurv = (ArrayList)ses.getAttribute("kurv");
Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 08:28 #7
Jeg kunne muligvis som du siger lave en funktion der hedder else if(action=bestil) da jeg kan få elementerne inden fra servletten og dernæst de nye parametre som navn adresse mm.
Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 08:31 #8
muligvis:

Vector buylist = (Vector)session.getValue("test.shoppingcart");
Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 08:36 #9
Her har jeg indsat koden med et forslag længerer nede indrammet i

-----------------------

-----------------------

import java.util.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import test.dbConnect;
import java.net.*;
import java.sql.*;
import test.Book;
import java.util.ArrayList;



public class ShoppingServlet extends HttpServlet {
  public void init(ServletConfig conf) throws ServletException  {
    super.init(conf);
  }
 
 
public void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    HttpSession session = request.getSession(false);
   
if (session == null) {
      response.sendRedirect("http://localhost:8080/minApp/error.html");
    }
   
   
Vector buylist = (Vector)session.getValue("test.shoppingcart");
    String action = request.getParameter("action");
   
if (!action.equals("CHECKOUT")) {
if (action.equals("DELETE")) {
       
    String del = request.getParameter("delindex");
      int d = (new Integer(del)).intValue();
      buylist.removeElementAt(d);
     

} else if (action.equals("ADD")) {
   
        //any previous buys of same book?
       
        boolean match=false;
 
        Book aBook = getBook(request);
       
        if (buylist==null) {
           
          //add first book to the cart
         
          buylist = new Vector(1000); //first order
         
          buylist.add(aBook);
         
        } else { // not first buy
       
        System.err.println("buylist=" + buylist);
          for (int i=0; i< buylist.size(); i++) {
            Book book = (Book) buylist.elementAt(i);

            if (book.getIsbn().equals(aBook.getIsbn())) {
              book.setAntal(book.getAntal()+aBook.getAntal());
              buylist.setElementAt(book,i);
              match = true;
            } //end of if name matches
          } // end of for
          if (!match)
            buylist.addElement(aBook);
        }
      }
      session.putValue("test.shoppingcart", buylist);
      String url="/jsp/shopping/showBookSpec.jsp";
      ServletContext sc = getServletContext();
      RequestDispatcher rd = sc.getRequestDispatcher(url);
      rd.forward(request, response);
     
    } else if (action.equals("CHECKOUT"))  {
      float total =0;
      for (int i=0; i< buylist.size();i++) {
        Book anOrder = (Book) buylist.elementAt(i);
        float pris= anOrder.getPris();
        int antal = anOrder.getAntal();
        total += (pris * antal);
      }
      total += 0.005;
      String amount = new Float(total).toString();
      int n = amount.indexOf('.');
      amount = amount.substring(0,n+3);
      request.setAttribute("amount",amount);
      String url="/jsp/shopping/Checkout.jsp";
      ServletContext sc = getServletContext();
      RequestDispatcher rd = sc.getRequestDispatcher(url);
      rd.forward(request,response);

-----------------------------------------------------------------------------------------
} else if(action.equals("BESTIL"))
Et eller andet kode der får de forskellige købte elementer, antal og parametre som navn, adresse osv.    

}
------------------------------------------------------------------------

  }

private Book getBook(HttpServletRequest request) {

try {   

dbConnect dbc = new dbConnect();
Connection con = dbc.getConnection();
Statement stmt = con.createStatement();


    String myBook = request.getParameter("book");
    String antal = request.getParameter("antal");

ResultSet rs = stmt.executeQuery("SELECT isbn, forfatter, titel, pris FROM boeger WHERE isbn = '" + myBook + "'");
   
    rs.next();
   
    Book book = new Book();
    book.setForfatter(rs.getString(2));
    book.setTitel(rs.getString(3));
    book.setIsbn(rs.getString(1));
    book.setPris((new Float(rs.getFloat(4))).floatValue());
    book.setAntal((new Integer(antal)).intValue());
 

   
    rs.close();
   
    stmt.close();     


    return book;

} catch (Exception e) {
    System.err.println(e);
    return null;

  }
 

 
    }

}
Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 08:39 #10
forstår ikke helt hvordan dette virker

HttpSession ses = request.getSession(false);
ArrayList kurv = (ArrayList)ses.getAttribute("kurv");

Hedder min kurv ikke test.shoppingcart eller betyder det ikke noget
Avatar billede arne_v Ekspert
25. november 2004 - 08:46 #11
Ja hov - du bruger Vector og ikke ArrayList - sorry
Avatar billede arne_v Ekspert
25. november 2004 - 08:47 #12
Jo navnet skal selvfølgelig matche.

HttpSession ses = request.getSession(false);
Vector kurv = (Vector)ses.getAttribute("test.shoppingcart");
Avatar billede arne_v Ekspert
25. november 2004 - 08:48 #13
Helt ligesom i din JSP kode:

HttpSession ses = request.getSession(false);
Vector buylist = (Vector)ses.getAttribute("test.shoppingcart");
for (int i=0; i < buylist.size();i++) {
  Book anOrder = (Book) buylist.elementAt(i);
  ...
}
Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 08:49 #14
ok så skriver jeg det her eller?

HttpSession ses = request.getSession(false);
Vector shopingcart = (Vector)ses.getAttribute("test.shoppingcart");
Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 08:50 #15
ok så ekstrakter jeg alle bøgerne fra buylisten også kan jeg få alle isbn numrene ud, samt antallet der er købt!
Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 08:55 #16
Så bruger jeg jo beanen med getIsbn på det enkelte element samt antal
Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 09:01 #17
Det burde virke ellers skriv lige hvis det virker ulogisk
Avatar billede arne_v Ekspert
25. november 2004 - 09:15 #18
Det burde virke ja.
Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 09:17 #19
Her er det jeg er gået igang med virker som en meget god plan

else if(action.equals("BESTIL"))    {

String navn;
String email;
String adresse;

navn = request.getParameter("Navn")
email = request.getParameter("Email")
   
   
for (int i=0; i < buylist.size();i++) {   
Book anOrder = (Book) buylist.elementAt(i);
String isbn = anOrder.getIsbn();
int antal = anOrder.getAntal();

lave en ordre til den bestmte kunde tilhørende en ordrelinie hvor alle de købte bøger ligger samt antal
Ligge ting i databasen med et bestemt kundeId ud fra navn som reference til en ordre. Sql sætninger osv.


      String url="/jsp/shopping/kvittering.jsp";
     
    ServletContext sc = getServletContext();
     
    RequestDispatcher rd = sc.getRequestDispatcher(url);
     
    rd.forward(request,response);



            }

        }
Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 09:19 #20
Skal hernæst extrakte alle tingene ok lave en bestemt bean der hedder mail, der kan have de data i sig som skal sendes via mail. Så opretter jeg faktsik bare en ny vector med de købte varer og sender dem via en email funktion.
Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 09:20 #21
Roder med det vender tilbage kl. 16.00 skal ud og lave noget arbejde. Tak for det indtil viderer, men tjek lige spørgsmålet efter 16 hvis du har tid for at se om jeg er stødt på flere problemer. Tror det ikke.
Avatar billede arne_v Ekspert
25. november 2004 - 20:35 #22
og et svar fra mig
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester