Avatar billede howisch Nybegynder
10. marts 2004 - 18:55 Der er 22 kommentarer og
1 løsning

kan ikke hente data fra servlet til jsp-side.

Vi har lavet et html-dokument hvor man skal indtaste et nummer. Når så man trykker på en knap, hentes via entity og session beans, oplysninger fra databasen. Servlet'en forward'er til en jsp-side. Problemet består i at vi ikke kan få oplysningerne vist på jsp-siden.
Avatar billede arne_v Ekspert
10. marts 2004 - 19:04 #1
Umiddelbart vil jeg finde det meget nærliggende at lade HTML siden submitte
direkte til JSP siden som så kalder session beanen - altså droppe servletten
helt.
Avatar billede howisch Nybegynder
10. marts 2004 - 19:07 #2
hvorfor?
Avatar billede arne_v Ekspert
10. marts 2004 - 19:09 #3
Fordi så forsvinder problemet.

:-)

JSP siden kan hente det indtastede nummer på samme måde som servletten.

Og når JSP siden får returneret nogle data fra session beanen, så kan den
bare generere HTML on the fly.
Avatar billede arne_v Ekspert
10. marts 2004 - 19:11 #4
Som hovedregel:

- brug submit til JSP for søg

- brug submit til controller servlet som forwarder til JSP for opdater

(og i det sidste tilfælde lader man JSP siden hente de data der evt. skal vises så
servletten kun laver updaten)
Avatar billede howisch Nybegynder
10. marts 2004 - 19:19 #5
Vi submitter til servlet som forwarder til jsp, men vi kan simpelthen ikke få vist de data, der er blevet hentet fra databasen.

Vi ved  med sikkerhed at dataene ER hentet, da vi kan udskrive dem i "console".

Hvordan kan vi få dem vist i jsp?
Avatar billede arne_v Ekspert
10. marts 2004 - 19:33 #6
Som jeg læser jeres problem, så er det første pind !
Avatar billede arne_v Ekspert
10. marts 2004 - 19:34 #7
Mindre pæne workaround er:

lad servletten gemme oplysningerne i request objektet og så lade JSP siden
hente dem der
Avatar billede howisch Nybegynder
10. marts 2004 - 19:40 #8
Hvordan gør vi det?

Herunder prøver vi at udskrive en vector med alle brugere: (servlet-kode)

public void process(HttpServletRequest req, HttpServletResponse resp) {
        try {
            String brugerID = req.getParameter("brugere");
               
            try {
                BrugerSes bruger = brugerSesHome.create();
                       
                if (brugerID != null) {
                    Handle handle = bruger.getHandle();
                    System.out.println("Handle class "+handle.getClass());
                    java.util.Vector brugerList = bruger.getAlleBrugere();
                    System.out.println("Servlet "+brugerList.size());
                    req.setAttribute("brugere", brugerList);
                    HttpSession session = req.getSession(true);
                    session.setAttribute("brugerEJB", bruger.getHandle()); 
                    getServletContext().getRequestDispatcher("SoegeNrSide").forward(req, resp);
                   
                }       
            } catch (Exception ex) {
                ex.printStackTrace();
                System.out.println("Fejl: "+ex.getMessage());
            }
        } catch (Exception ex) {
            ex.printStackTrace();
               
        }
       
    }
Avatar billede howisch Nybegynder
10. marts 2004 - 19:42 #9
Her er et uddrag af vores jsp-kode:

<BODY>
<%! String[] data = null; %>
<jsp:useBean id="brugere" class="java.util.Vector" scope="request"></jsp:useBean>
<TABLE>
<!-- row 11 -->
    <TR bgcolor="#0099CC">
        <TD class="tdhvid" width="110" colspan="2">Søgeresultat</TD>
    </TR>
   
    <tr>
        <td> </td>
    </tr>
   
    <% if (brugere != null) {
        for (int i=0; i < brugere.size(); i++) {
            data = (String[])brugere.elementAt(i); %>
                       
            <TR>
                <TD colspan="2">
                    <%= data[0] %>
                </TD>
Avatar billede arne_v Ekspert
10. marts 2004 - 19:55 #10
Hvilken fejl får i ?
Avatar billede arne_v Ekspert
10. marts 2004 - 19:57 #11
Det eneste der umiddelbart undrer mig er at data er
  String[]
jeg ville have troe at den kun skulle være
  String

Altså en Vector af String ikke en Vector af String[].
Avatar billede howisch Nybegynder
10. marts 2004 - 20:21 #12
Vi får denne fejl:

[10-03-04 20:23:12:438 CET] 6469acf5 SystemErr    R javax.servlet.ServletException
[10-03-04 20:23:12:812 CET] 6469acf5 SystemErr    R     at com.ibm.ws.webcontainer.jsp.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:409)
[10-03-04 20:23:12:812 CET] 6469acf5 SystemErr    R     at com.ibm.ws.webcontainer.jsp.servlet.JspServlet.serviceJspFile(JspServlet.java:662)
[10-03-04 20:23:12:844 CET] 6469acf5 SystemErr    R     at com.ibm.ws.webcontainer.jsp.servlet.JspServlet.service(JspServlet.java:760)
[10-03-04 20:23:12:844 CET] 6469acf5 SystemErr    R     at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
[10-03-04 20:23:12:844 CET] 6469acf5 SystemErr    R     at com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java:110)
[10-03-04 20:23:12:844 CET] 6469acf5 SystemErr    R     at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java:174)
[10-03-04 20:23:12:844 CET] 6469acf5 SystemErr    R     at com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycleServlet.java:313)
[10-03-04 20:23:12:844 CET] 6469acf5 SystemErr    R     at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java:116)
[10-03-04 20:23:12:844 CET] 6469acf5 SystemErr    R     at com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java:283)
[10-03-04 20:23:12:859 CET] 6469acf5 SystemErr    R     at com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(ValidServletReferenceState.java:42)
[10-03-04 20:23:12:859 CET] 6469acf5 SystemErr    R     at com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(ServletInstanceReference.java:40)
[10-03-04 20:23:12:859 CET] 6469acf5 SystemErr    R     at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java:974)
[10-03-04 20:23:12:859 CET] 6469acf5 SystemErr    R     at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:555)
[10-03-04 20:23:12:859 CET] 6469acf5 SystemErr    R     at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:200)
[10-03-04 20:23:12:859 CET] 6469acf5 SystemErr    R     at adm.pmp.servlet.BrugerNummerServlet.process(BrugerNummerServlet.java:76)
[10-03-04 20:23:12:859 CET] 6469acf5 SystemErr    R     at adm.pmp.servlet.BrugerNummerServlet.doPost(BrugerNummerServlet.java:42)
[10-03-04 20:23:12:859 CET] 6469acf5 SystemErr    R     at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
[10-03-04 20:23:12:859 CET] 6469acf5 SystemErr    R     at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
[10-03-04 20:23:12:859 CET] 6469acf5 SystemErr    R     at com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java:110)
[10-03-04 20:23:12:859 CET] 6469acf5 SystemErr    R     at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java:174)
[10-03-04 20:23:12:859 CET] 6469acf5 SystemErr    R     at com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycleServlet.java:313)
[10-03-04 20:23:12:859 CET] 6469acf5 SystemErr    R     at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java:116)
[10-03-04 20:23:12:859 CET] 6469acf5 SystemErr    R     at com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java:283)
[10-03-04 20:23:12:859 CET] 6469acf5 SystemErr    R     at com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(ValidServletReferenceState.java:42)
[10-03-04 20:23:12:859 CET] 6469acf5 SystemErr    R     at com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(ServletInstanceReference.java:40)
[10-03-04 20:23:12:859 CET] 6469acf5 SystemErr    R     at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java:974)
[10-03-04 20:23:12:859 CET] 6469acf5 SystemErr    R     at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:555)
[10-03-04 20:23:12:859 CET] 6469acf5 SystemErr    R     at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:200)
[10-03-04 20:23:12:859 CET] 6469acf5 SystemErr    R     at com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java:119)
[10-03-04 20:23:12:859 CET] 6469acf5 SystemErr    R     at com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInvoker.java:276)
[10-03-04 20:23:13:219 CET] 6469acf5 SystemErr    R     at com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocation(CachedInvocation.java:71)
[10-03-04 20:23:13:219 CET] 6469acf5 SystemErr    R     at com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(ServletRequestProcessor.java:182)
[10-03-04 20:23:13:219 CET] 6469acf5 SystemErr    R     at com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSEListener.java:334)
[10-03-04 20:23:13:219 CET] 6469acf5 SystemErr    R     at com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection.java:56)
[10-03-04 20:23:13:219 CET] 6469acf5 SystemErr    R     at com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java:618)
[10-03-04 20:23:13:219 CET] 6469acf5 SystemErr    R     at com.ibm.ws.http.HttpConnection.run(HttpConnection.java:439)
[10-03-04 20:23:13:219 CET] 6469acf5 SystemErr    R     at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:593)
Avatar billede howisch Nybegynder
10. marts 2004 - 20:22 #13
Vi har rettet det til en vector med String objekter.

Servlet'en bliver vist, men den er helt tom/blank.
Avatar billede arne_v Ekspert
10. marts 2004 - 20:24 #14
size er >0 på servlet side og =0 på JSP siden ?
Avatar billede howisch Nybegynder
10. marts 2004 - 20:38 #15
Kan du uddybe det?

Vi har sat i = 1 i jsp-koden, men det er måske ikke det du mener?
Avatar billede arne_v Ekspert
10. marts 2004 - 20:50 #16
Hvad er size i servlet og hvad er size i JSP ?
Avatar billede howisch Nybegynder
10. marts 2004 - 20:55 #17
hvordan kan jeg se det?
Avatar billede arne_v Ekspert
10. marts 2004 - 21:05 #18
Servletten skriver det allerede nu ud i consollen med:
  System.out.println("Servlet "+brugerList.size());

JSP siden kan du bare tilføje:

Antal = <%=brugere.size()%>
Avatar billede howisch Nybegynder
10. marts 2004 - 21:18 #19
De viser 9 begge to. Og det virker nu. Vi får det frem vi ønsker..

Er alt nedenstående kode fra servlet'en nødvendig for at opnå dette resultat? Bortset fra "System.out.println..."

if (brugerID != null) {
                    Handle handle = bruger.getHandle();
                    System.out.println("Handle class "+handle.getClass());
                    java.util.Vector brugerList = bruger.getAlleBrugere();
                    System.out.println("Servlet "+brugerList.size());
                    req.setAttribute("brugere", brugerList);
                    HttpSession session = req.getSession(true);
                    session.setAttribute("brugerEJB", bruger.getHandle()); 
                    getServletContext().getRequestDispatcher("SoegeNrSide").forward(req, resp);


Kan/vil du forklare hvad de enkelte linier gør/skal til for?

Her tænker vi på "Handle", "req.setAttribute" og "HttpSession".
Avatar billede arne_v Ekspert
10. marts 2004 - 21:21 #20
Herligt !
Avatar billede arne_v Ekspert
10. marts 2004 - 21:24 #21
Umiddelbart tror jeg at I kan nøjes med:

if (brugerID != null) {
                    req.setAttribute("brugere", bruger.getAlleBrugere());
                    req.getSession(true).setAttribute("brugerEJB", bruger.getHandle());
                    getServletContext().getRequestDispatcher("SoegeNrSide").forward(req, resp);
Avatar billede arne_v Ekspert
10. marts 2004 - 21:24 #22
Håber det er OK at jeg ligger et svar nu
Avatar billede howisch Nybegynder
10. marts 2004 - 21:30 #23
Mange tak for hjælpen.
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