Avatar billede taae Juniormester
23. november 2005 - 15:28 Der er 34 kommentarer og
1 løsning

Anv javabean til udtræk af data fra db

jeg vil gerne udtrække data fra db og sætte dem ind i comboboxe.

Når jeg i den første combobox vælger ex en bilmærke, så skal dens modeller, motor størelser og årgange automatisk hentes fra db og sættes ind på comboboxene.

til dette tænkte jeg på at lave en javabean, som vha getProperty, får alle get metoderne til at hente data fra db og sætte dem ind.
Lyder det som en god ide ?
Avatar billede fsconsult.dk Nybegynder
23. november 2005 - 15:46 #1
som nævnt i det andet spørgsmål, kan du ikke dynamisk loade data i combobox2, afhængig af hvad brugeren vælger i combobox1, da java/jsp-koden forlængst er færdig, og har resulteret i noget html (og evt. javascript).

det du skal benytte er AJAX, som er javascript der asynkront kalder en servlet eller lign, og henter data til combobox2, når brugeren vælger i combobox1.
Avatar billede taae Juniormester
23. november 2005 - 15:52 #2
ok...noget link til ajax
Avatar billede fsconsult.dk Nybegynder
23. november 2005 - 16:05 #3
Avatar billede taae Juniormester
23. november 2005 - 16:27 #4
fsconsult - jeg har ikke programemret i hverken javascript eller xml før. Og jeg forstår heller ikke deres kode eks fuldt ud...
Avatar billede fsconsult.dk Nybegynder
23. november 2005 - 16:32 #5
det er mig bekendt eneste mulighed, medmindre du faktisk laver submit af din jspside hver gang brugeren ændrer i combobox1 ..  det giver dog en urolig oplevelse for brugeren
Avatar billede taae Juniormester
23. november 2005 - 16:40 #6
jeg kan godt se fidusen i at Ajax skulle være glimrende til at lave dynamiske web app. Men der er for megen af det kode der skal til, som jeg ikke kender noget til.

for at gøre det mere simpelt, så kunne jeg sige at alle bil mærker har en bestemt motor str, og alle biler er fra årgang mellem 1990-2000. Dvs for disse to skal der ikke meget hokus pokus til.

Det eneste skulle så være at når man valgte et mærke, så skal javabean ud fra mærket hente modellen i db.

man kunne så kalde disse get metoder engang og bagefter lave en submit på jsp siden.
How's that !

Eller kan man bare ikke gøre sådan noget !
Avatar billede fsconsult.dk Nybegynder
23. november 2005 - 16:43 #7
du KAN bare ikke gøre noget sådan i JSP, da din javabean er "død" på det tidspunkt at brugeren vælger i combobox
Avatar billede taae Juniormester
23. november 2005 - 18:39 #8
fsconsult - jeg er nu psykisk klar til at gå i krig med både javascript og xml.

for at kunne lave javascript i eclipse, hvilken type klasse skal jeg vælge... jeg tænker på om jeg skal vælge en java klasse, jsp klasse, html, eller en alm fil.

tjekker du koderne for mig efterhånden som jeg får lavet lidt.. er ikke bekendt med javascript syntaks
Avatar billede taae Juniormester
23. november 2005 - 18:40 #9
jeg har siddet og læst hist og pist, og kan se at i mange tilfælde er koderne ens. Forskellen ligger kun i hvad man ønsker at hente fra serveren.
Avatar billede taae Juniormester
24. november 2005 - 00:46 #10
1. lidt jsp kode. Her vil jeg gerne lave en event vha. metoden validate() ved onkeyup.
-------------------------------------------------------------------------------------
<TR>
    <TD align='center' width='30%'>
        <FORM method='get' name='bilmaerke' onkeyup='validate()'>                                    <table

border='0' cellspacing='5' cellPadding='3'>
                <tr>
                    <td colspan='2'>
                        bilmaerker
                        </td>
                        <td>
                            <SELECT name="Bilmaerker">
                                <OPTION>
                                Audi
                                </OPTION>
                                <OPTION>
                                BMW
                                </OPTION>
                                <OPTION>
                                FORD
                                </OPTION>
                                <OPTION>
                                OPEL
                                </OPTION>
                                <OPTION>
                                SKODA
                                </OPTION>
                                <OPTION>
                                VW
                                </OPTION>
                            </SELECT>
                        </td>
                </tr>
</TR>

-----------------------------------------------------
2.Et XMLHttpRequest objekt laves og konfigureres.
-----------------------------------------------------

var req;

function validate()
{
  var url = "validate?id=" + escape(target.value);
  if (window.XMLHttpRequest) {
      req = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
      req = new ActiveXObject("Microsoft.XMLHTTP");
  }
  req.open("GET", url, true);
  req.onreadystatechange = callback;
  req.send(null);
}

----------------------------------------------------
3.Request bliver bearbejdet af validateServlet.
----------------------------------------------------

public class ValidateServlet extends HttpServlet
{

  /* SKAL FORB TIL DB OPRETTES HER I METODEN ELLER FRA JAVA KLASSE ???? */

  public void doGet(HttpServletRequest request, HttpServletResponse response)
                    throws IOException, ServletException
  {
    String maerke= request.getParameter("rs.getString("maerke")");

    if(
Avatar billede taae Juniormester
24. november 2005 - 00:48 #11
if(maerke != null)
        {
      response.setContentType("text/xml");
          response.setHeader("Cache-Control", "no-cache");
          response.getWriter().write("Bilmærke er valgt");
        }
   
    else
    {
            response.setContentType("text/xml");
            response.setHeader("Cache-Control", "no-cache");
            response.getWriter().write("Ingen bilmærke valgt");
        }
   
       
  }
}

------------------------------------------------------------------
4.XMLHttpRequest objekt kalder callback metoden som er defineret i
  pkt 2 for at videregive resultatet
------------------------------------------------------------------

function callback()
{
  if (req.readyState == 4)  /*XMLHttpRequest kald fuldført */
  {
    if (req.status == 200)  /*succesfuld HTTP interaktion*/
      {
    parseMessages ();
      }
     
      else
          {
          clearTable();
          }     
  }

}

------------------------------------------------------------------
5. Hvis status= 200 er sand så kaldes denne metode parseMessages()
------------------------------------------------------------------

function parseMessages ()
{
  var maerke=req.responseXML.getElementsByTagName("maerke")[0];

  /* VED IKKE HVAD DER SKAL STÅ HER */   

 
}


-----------------------------------------------------------------
6. HTML DOM skal opdateres med de rigtige oplysninger
-----------------------------------------------------------------

  ????
Avatar billede taae Juniormester
24. november 2005 - 00:51 #12
Jeg ved godt at jeg ikk skal poste dem her i java afdelingen, men jeg havde troet i starten at jeg kunne nøjes med en bean, hvilket jeg ikke kunne. Beklager

Nogen der gider at tjekke dem for mig. OG komme med eventuelle rettelser og forslag
Avatar billede arne_v Ekspert
24. november 2005 - 01:10 #13
AJAX er jo stadig et ekstra server roundtrip bare "blinkfri".

Der er det alternativ som hedder at outputte det hele fra JSP/servlet/bean og
manipulere værdierne i den ene SELECT når man vælger en ny værdi i den anden SELECT
ved hjælp af JavaScript.
Avatar billede arne_v Ekspert
24. november 2005 - 01:10 #14
Jeg har postet et eksempel i et af de tidligere spørgsmål.
Avatar billede taae Juniormester
24. november 2005 - 11:51 #15
arne vil du være sød og lave et link til det spg du referer til

Arne for at løse mit problem, siger du så at der evt kan anvendes noget andet, eller at det her er løsningen....
Avatar billede arne_v Ekspert
24. november 2005 - 12:03 #16
der er mange måder at løse problemet på
Avatar billede arne_v Ekspert
24. november 2005 - 12:04 #17
koden er den her:

<%@ page import="java.sql.*" %>
<html>
<head>
</head>
<body onload="loadbrands();">
<%
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection("jdbc:odbc:TestMSAccess");
Statement stmt = con.createStatement();
ResultSet rs1 = stmt.executeQuery("SELECT DISTINCT brand FROM cars");
String brands = "'vælg mærke'";
int nbrands = 0;
while(rs1.next()) {
    brands = brands + ",'" + rs1.getString(1) +"'";
    nbrands++;
}
rs1.close();
ResultSet rs2 = stmt.executeQuery("SELECT brand,model FROM cars");
String[] cars = new String[nbrands];
String lastbrand = "";
int ix = -1;
while(rs2.next()) {
    String col = rs2.getString(1);
    if(!col.equals(lastbrand)) {
        ix++;
        cars[ix] = "'vælg model'";
        lastbrand = col;
    }
    cars[ix] = cars[ix] + ",'" + rs2.getString(2) +"'";
}
rs2.close();
stmt.close();
con.close();
%>
<script type="text/javascript">
var brands = new Array(<%=brands%>);
var models = new Array(
<%
for(int i = 0; i < cars.length; i++) {
%>
                    new Array(<%=cars[i]%>)<%=(i<cars.length-1)?",":""%>
<%
}
%>
                    );
function loadbrands()
{
    for(i=0;i<brands.length;i++) document.car.brand.options[i] = new Option(brands[i],brands[i]);
};
function loadmodels()
{
    var a = models[document.car.brand.selectedIndex-1];
    for(i=0;i<a.length;i++) document.car.model.options[i] = new Option(a[i],a[i]);
}
</script>
<form name="car" method="POST" action="show.jsp">
Mærke:
<select name="brand" onchange="loadmodels();">
</select>
<br/>
Model:
<select name="model">
</select>
<br/>
<input type="SUBMIT" value="Vis"/>
</form>
</body>
</html>
Avatar billede arne_v Ekspert
24. november 2005 - 12:04 #18
og den er ikke pæn - server side kode som genererer client side JavaScript kode
er sjældent pænt
Avatar billede taae Juniormester
24. november 2005 - 21:14 #19
men den her eks du kommer med, den kan ikke hente data fra eks. 4 forskellige tabeller og sætte dem ind samtidig i combo box vel ???
Avatar billede taae Juniormester
24. november 2005 - 21:15 #20
og ja selvfølgelig skal dit eks modificeres, så den passer til 4 tabeller, men kan den det ??
Avatar billede arne_v Ekspert
25. november 2005 - 00:52 #21
det vil jeg da mene

hele pointen er at hente alt i en request til server og så lade JavaScript
client side manipulere med valg muligheder i form

om SQL er så simple som i dette eksempel eller mere komplekse ændrer ikke på
teknikken
Avatar billede taae Juniormester
25. november 2005 - 01:16 #22
Jeg har efterprøvet dit eks arne og det er ikke hvad jeg ønskede at gøre.

Efter valget af bilmærke, så skal de andre comboboxe læse dens modeller, motor str og årgange ind.

Da jeg prøvede dit eks, stod alle bilmærker i den første og bilmodeller i den anden combobox, hvilket ikke var meningen.
Avatar billede taae Juniormester
25. november 2005 - 01:17 #23
jeg tog ikke den kode eks du har foroven, men den du postede for noget tid siden.. jeg valgte den simple løsning
Avatar billede arne_v Ekspert
25. november 2005 - 01:18 #24
Ja. Men når du vælger bilbærke i den første combo box så ændres mulighederne
i den anden combo box til kun at være modeller for det mærke. Var det ikke den
type effekt du ønskede ?
Avatar billede arne_v Ekspert
25. november 2005 - 01:19 #25
Den simple - er ikke det som du søger. Du søger enten den jeg kaldte server side
(med flere requests) eller client side (den her med JavaScript)
Avatar billede taae Juniormester
25. november 2005 - 01:25 #26
ja til det svar du kom med kl. 01:18:12

jeg prøver lige den så...

arne hvis jeg vil bygge videre på dine java script kode for loadmotor() og loadyear()

kan du anbefale nogle gode sider...
Avatar billede taae Juniormester
25. november 2005 - 01:28 #27
bare lige for forståelsens skyld. java script kører hos brugeren,og det samme gør java også.

Hvis jeg modtager data fra serveren og skal bearbejde dem på client side, hvorfor bruger man så javascript ? kan java ikke gøre det ???
Avatar billede taae Juniormester
25. november 2005 - 02:35 #28
jeg har prøvet din server side logik.

Når jeg vælger det første mærke, så gå den automtisk over til select_serverside.jsp

selvom man forinden siger at hvis brand==null så vælg denne .jsp eller denne .jsp

men i select_serverside.jsp skriver den godt nok navnet på mærket ?!?!?!?
Avatar billede arne_v Ekspert
25. november 2005 - 11:15 #29
JavaScript ligger uden for mit primære ekspertise/intresse område, men der er
en JavaScript kategori

JavaScript kører client side

JSP kører server side

(Java applets kører client side, men det er noget andet)
Avatar billede arne_v Ekspert
25. november 2005 - 11:17 #30
og jeg forstår ikke hvad det er du kører, hvad du får ud af det og hvad du ville have ud af det
Avatar billede taae Juniormester
26. november 2005 - 00:11 #31
arne hvad angår server side logik

hvergang når jeg vælger et bilmærke så pga sætning :

<form name="car" action="<%=(brand==null)?"select_serverside.jsp":"Testcar.jsp"%>">

går den automatisk over til select_serverside.jsp.

På denne side har jeg så følgende kode for at læse brand og model:


<%
        String bil=request.getParameter("brand");
        String model= request.getParameter("model");
       
        if(bil == null)
        {%>
          Der er ikk blevet valgt nogen maerke. <p>
        <%}
        else
        {%>
          Du har valgt maerke: <%= bil%>
        <%}
       
        if (model == null)
        {%>
          Der er ikke valgt nogen modeller
        <%}
        else
        {%>
          Du har valgt model: <%= model%>
        <%}
    %>

Dvs, som output får jeg : Du har valgt maerke: Audi Du har valgt maerke: vælg model

Hvis den havde læst nogen af modellerne overhovedet så burde den ha skrevet ex A3, men det gør den ikke

Hvad går galt her...
Avatar billede taae Juniormester
26. november 2005 - 00:16 #32
efter form name"car" var der lige method="POST", som jeg havde fjernet...
Avatar billede taae Juniormester
26. november 2005 - 02:02 #33
ok - jeg kan godt se at den går ind i server.jsp hele tiden pga if.. else

jeg har fjernet hele if-else og har nu kun de indlæse værdier tilbage som jeg skriver ud på skærmen.

Når jeg kører den nu, så skal jeg både vælge mærke og model, før den vil skifte side til server.jsp og skriver de værdier frem som jeg har valgt
Avatar billede taae Juniormester
23. februar 2006 - 17:45 #34
.
Avatar billede taae Juniormester
23. februar 2006 - 17:46 #35
.
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