Avatar billede cayenne Nybegynder
19. maj 2004 - 17:21 Der er 12 kommentarer og
2 løsninger

Bevar data i select box når form sendes til samme servlet

Jeg har en formular, med flere felter og en selectbox.
Formularen sendes til samme side(servlet)/sig selv og data lægges i database.

Selectboxens data er også hentet fra databasen.

Hvordan sørger jeg for at det samme item er valgt i selectboksen efter at have sendt formularen, som før ??
Avatar billede arne_v Ekspert
19. maj 2004 - 17:54 #1
Når du genererer dine option tags så generererer du:

<SELECT NAME="navnpåkontrol">"
<OPTION>Værdi 1
<OPTION SELECTED>Værdi 2
<OPTION>Værdi 3
</SELECT>"
Avatar billede cayenne Nybegynder
19. maj 2004 - 18:03 #2
Hmm, det kan jeg jo ikke i første ombæring. Der henter jeg som sagt data fra en tabel og genererer dem via en whileløkke.
Først derefter vælges en af dem i selectboksen, hvorpå formularen sendes.......så det er vel noget med at gribe variablen i value ??
Avatar billede arne_v Ekspert
19. maj 2004 - 18:09 #3
Som jeg forstår det:

browser kalder servlet
servlet henter data fra database og viser SELECT uden nogen valgt
bruger vælger og submitter
servlet henter igen data fra database men vise nu SELECT med den valgt som bruger valgte
Avatar billede cayenne Nybegynder
19. maj 2004 - 18:13 #4
Ja korrekt. Har bare svært ved at overskue hvordan jeg får proppet select ind det rigtige sted :o)
Avatar billede arne_v Ekspert
19. maj 2004 - 22:50 #5
Super simpelt eksempel:

import java.io.*;

import javax.servlet.*;
import javax.servlet.http.*;

public class RememberServlet extends HttpServlet {
    private String[] fromdatabase = { "A", "BB", "CCC", "DDDD" };
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String sel = request.getParameter("selbox");
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<FORM METHOD='GET' ACTION='RememberServlet'>");
        out.println("<SELECT NAME='selbox'>");
        for(int i = 0; i < fromdatabase.length; i++) {
            if(fromdatabase[i].equals(sel)) {
                out.println("<OPTION SELECTED>" + fromdatabase[i]);       
            } else {
                out.println("<OPTION>" + fromdatabase[i]);       
            }
        }
        out.println("</SELECT>");   
        out.println("<INPUT TYPE='SUBMIT' VALUE='Submit'>");   
        out.println("</FORM>");   
    }
}
Avatar billede cayenne Nybegynder
20. maj 2004 - 12:27 #6
Jeg kan simpelthen ikke gennemskue hvordan jeg skal omskrive min nedenstående kode i forhold til dit forslag. Jeg vil meget gerne give flere point, hvis du vil hjælpe ?


out.print("<form name=\"menu\" method=\"GET\" action=\"Test\">");
    out.print("<table width=\"17%\" border=\"0\">");
   
    //------------------------Selectbox fyldes fra databasen
           
          out.print("<tr><td><select name=\"forestilling\">");                 
          try{   
        sqlq.hentFilm();       
        while (sqlq.rs.next()){
            String title = sqlq.rs.getString("film_titel");
            Date dato = sqlq.rs.getDate("forestilling_dato");
            int forestillingid = sqlq.rs.getInt("forestilling_id");
            Time tid = sqlq.rs.getTime("forestilling_tidspunkt");
            out.print("<option value = " + forestillingid + ">" + title +" "+ dato +" "+ tid + "</option>");
        }
    }catch (SQLException e){
        out.print("databaseerror :" + e);
    }
          out.print("</select> </td></tr>");
    out.print("<tr><td><input type=\"submit\" name=\"submit\" value=\"VisForestilling\"> </td></tr>");         
        out.print("<tr><td>r&aelig;kke nr.<input type=\"text\" name=\"raekke\"></td></tr>");
        out.print("<tr><td>s&aelig;de 1 <input type=\"text\" name=\"saede1\"></td></tr>");
        out.print("<tr><td>s&aelig;de 2 <input type=\"text\" name=\"saede2\" value=\"0\"></td></tr>");
        out.print("<tr><td>s&aelig;de 3 <input type=\"text\" name=\"saede3\" value=\"0\"></td></tr>");
        out.print("<tr><td>s&aelig;de 4 <input type=\"text\" name=\"saede4\" value=\"0\"></td></tr>");
        out.print("<tr><td>s&aelig;de 5 <input type=\"text\" name=\"saede5\" value=\"0\"></td></tr>");
        out.print("<tr><td>s&aelig;de 6 <input type=\"text\" name=\"saede6\" value=\"0\"></td></tr>");
          out.print("<tr><td>tlf<input type=\"text\" name=\"telefon\"></td></tr>");
          out.print("<tr><td>Status:<select name=\"status\"><option value= \"1\">Booked</option><option value=\"2\">Sold</option> ");
          out.print("<tr><td><input type=\"submit\" name=\"submit\" value=\"Reserver\"> </td></tr>");     
    out.print("</table></form></td>");
Avatar billede arne_v Ekspert
20. maj 2004 - 12:35 #7
Det relevante kode må være det her:

         
          out.print("<tr><td><select name=\"forestilling\">");               
          try{ 
        sqlq.hentFilm();     
        while (sqlq.rs.next()){
            String title = sqlq.rs.getString("film_titel");
            Date dato = sqlq.rs.getDate("forestilling_dato");
            int forestillingid = sqlq.rs.getInt("forestilling_id");
            Time tid = sqlq.rs.getTime("forestilling_tidspunkt");
            out.print("<option value = " + forestillingid + ">" + title +" "+ dato +" "+ tid + "</option>");
        }
    }catch (SQLException e){
        out.print("databaseerror :" + e);
    }
          out.print("</select> </td></tr>");

som må skulle ændres til noget lignende:

          String svalgt = request.getParameter("forestilling");
          int ivalgt;
          if(svalgt==null) {
            ivalgt = -1;         
          } else {
              ivalgt = Integer.parseInt(svalgt);
          }
          out.print("<tr><td><select name=\"forestilling\">");               
          try{ 
        sqlq.hentFilm();     
        while (sqlq.rs.next()){
            String title = sqlq.rs.getString("film_titel");
            Date dato = sqlq.rs.getDate("forestilling_dato");
            int forestillingid = sqlq.rs.getInt("forestilling_id");
            Time tid = sqlq.rs.getTime("forestilling_tidspunkt");
            if(forestillingid==ivalgt) {
              out.print("<option value = " + forestillingid + " selected>" + title +" "+ dato +" "+ tid + "</option>");
            } else {
              out.print("<option value = " + forestillingid + ">" + title +" "+ dato +" "+ tid + "</option>");
            }
        }
    }catch (SQLException e){
        out.print("databaseerror :" + e);
    }
          out.print("</select> </td></tr>");
Avatar billede cayenne Nybegynder
20. maj 2004 - 13:18 #8
Der sker ikke noget n
Avatar billede cayenne Nybegynder
20. maj 2004 - 13:18 #9
Ups, der sker ikke noget når jeg klikker på accepter.....kan du ikke lave et svar mere ?
Avatar billede arne_v Ekspert
20. maj 2004 - 14:05 #10
svar
Avatar billede arne_v Ekspert
20. maj 2004 - 14:06 #11
Husker du at markere mit navn inden du klikker accepter ?
Avatar billede cayenne Nybegynder
20. maj 2004 - 15:04 #12
Nej, det gjorde jeg selvfølgelig ikke :o)
Tusind tak for hjælpen.......nu virker det. Jeg vil gerne give dig flere point, men jeg ved ikke hvordan jeg gør ?
Avatar billede arne_v Ekspert
20. maj 2004 - 15:06 #13
http://expfaq.1go.dk/?id=30#giv_flere_point

(der er iøvrigt mange gode tips i den FAQ)
Avatar billede cayenne Nybegynder
23. maj 2004 - 10:46 #14
Hejsa
Så er der flere point her: http://www.eksperten.dk/spm/501353
og endnu en gang tak for hjælpen :o)
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