[J2EE] Gebruik een bean in JSP

Pagina: 1
Acties:

  • FendtVario
  • Registratie: Januari 2002
  • Laatst online: 12-05-2025

FendtVario

The leader drives Vario!

Topicstarter
Ik probeer mezelf een beetje wegwijs te maken in Java Server Pages en alles wat er om heen hangt. Hiervoor heb ik op internet een (gratis) boekje gedownload wat ik een beetje aan het doorspitten ben en de voorbeeldjes na maak. Ik heb echter een probleem waar ik niet uit kom, op google kan ik het antwoord niet vinden. Kort samengevat: een servlet maakt een object aan, roept met de dispatcher een jsp aan. De JSP moet dan dat object gebruiken (dmv jsp:useBean) maar er komt een foutmelding bij de creatie van het object.

Ik zat het hier iets uitgebreider toelichten. Ik heb een servlet gemaakt wat een reactie op een bepaald event opvangt (bijv. het versturen van een formulier). Dit servlet verwerkt de gegevens en roept vervolgens met een dispatcher een JSP aan die de zaak dan weer kan geven. De servlet ziet er zo uit:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.*;
import myPackage.*;

public class Tester extends HttpServlet {
    public void doPost(
        HttpServletRequest request,
        HttpServletResponse response)
        throws ServletException, IOException {

        Test name = new Test("FendtVario");

        HttpSession session = request.getSession(true);
        session.setAttribute("name", name);

        RequestDispatcher dispatcher =
            getServletContext().getRequestDispatcher("/Test.jsp");
        dispatcher.forward(request, response);      

    }
}
De klasse Test ziet er zo uit:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Test {
    
    private String name;
    
    public Test(String name) {
        setName(name);
    }

    public String getName() {
        return (name);
    }
    
    public void setName(String name) {
        this.name = name;
    }

}


Deze wordt vervolgens gebruikt in de JSP, deze gebruik een jsp:useBean om het object te gebruiken. Hier de code:
Java:
1
2
    <jsp:useBean id="name" class="myPackage.Test" scope="session" />                 
This page belongs to <jsp:getProperty name="name" property="name" />


Ik krijg dan een foutmelding dat het object niet gemaakt kan worden.
code:
1
2
3
/home/chris/opt/jakarta-tomcat-5.0.16/work/Catalina/localhost/site/org/apache/jsp/Test_jsp.java:54: 
Test(java.lang.String) in myPackage.Test cannot be applied to ()
          name = new myPackage.Test();
De foutmelding is logisch, de JSP probeert de klasse de creeeren zonder parameters. Als ik de parameter uit de constructor van de klasse Test haal werkt het wel. Ik gebruik Tomcat 5.0.16 onder Linux (Suse 9). Ik het boek (hoofdstuk 15.2) wordt een iets moeilijker object (te groot voor hier) op gelijke manier gemaakt, dus ook met parameters in de constructor. Dit werkt ook niet. Wat doe ik hier fout??

www.fendt.com | Nikon D7100 | PS5


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
JavaBeans moeten een public constructor hebben zonder parameters. Als je die toevoegt zou het moeten werken.

  • FendtVario
  • Registratie: Januari 2002
  • Laatst online: 12-05-2025

FendtVario

The leader drives Vario!

Topicstarter
Daar was ik ook achter gekomen, maar waarom gebruiken ze in het boek (Core Servlets and JavaServer Pages, hoofdstuk 15, Listing 15.3 en 15.4) dat een bean die een constructor heeft met parameters?? De bedoeling is ook dat de bean uit de sessie gehaald wordt (tenminste, als ik het goed begrijp) en dat er vervolgens mee gewerkt wordt. Ik wil hier geen nieuwe bean maken maar de informatie gebruiken die in de servlet bij elkaar geraapt wordt.

www.fendt.com | Nikon D7100 | PS5


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Dan is het boek fout :P

Dat die bean in de praktijk nooit zal worden geinstantieerd door jsp:useBean maakt niet zo veel uit. De gegenereerde servlet v/d jsp zal hier toch code voor bevatten. Zonder de constructor gaat het compilen ervan dus niet goed.

[ Voor 14% gewijzigd door marcusk op 02-02-2004 22:13 ]


  • FendtVario
  • Registratie: Januari 2002
  • Laatst online: 12-05-2025

FendtVario

The leader drives Vario!

Topicstarter
Hum, lekker boek dan. Gelukkig is het gratis. Heb je een link naar een tutorial die het wel doet? Ik zou graag zien dat zou werken.

www.fendt.com | Nikon D7100 | PS5


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
FendtVario schreef op 02 februari 2004 @ 22:14:
Hum, lekker boek dan. Gelukkig is het gratis. Heb je een link naar een tutorial die het wel doet? Ik zou graag zien dat zou werken.
Het is niet eens echt helemaal fout alleen wel incompleet. Als je gewoon een lege constructor toevoegt zal het compileren wel weer goed gaan. Je ziet het wel vaker in boeken dat ze stukjes weglaten die ze eigenlijk niet weg mochten laten.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
FendtVario schreef op 02 februari 2004 @ 22:14:
Hum, lekker boek dan. Gelukkig is het gratis. Heb je een link naar een tutorial die het wel doet? Ik zou graag zien dat zou werken.
Nee, ik zou het niet weten. Maar het boek is niet meteen slecht door 1 fout lijkt me :)

  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
en als je dan toch per se een constructor met een parameter wilt kun je hem altijd nog tussen <% %> zelf aanroepen. Beetje vies, maar werkt wel.

[ Voor 8% gewijzigd door zneek op 02-02-2004 23:55 ]


  • FendtVario
  • Registratie: Januari 2002
  • Laatst online: 12-05-2025

FendtVario

The leader drives Vario!

Topicstarter
Maar als ik hem zelf aan maak? Dan heeft hij toch niet dezelfde eigenschappen dan wanneer de bean in een servlet wordt gemaakt en vervolgens in een JSP wordt gebruikt? Inmiddels heb ik een lege constructor erbij gezet. Ik zal nog eens verder experimenteren.

www.fendt.com | Nikon D7100 | PS5


  • Apie!
  • Registratie: Januari 2000
  • Laatst online: 09-03 19:55

Apie!

Newer, better & confusinger

FendtVario schreef op 02 februari 2004 @ 22:14:
Hum, lekker boek dan. Gelukkig is het gratis. Heb je een link naar een tutorial die het wel doet? Ik zou graag zien dat zou werken.
had je al op java.sun.com gekeken :?

http://java.sun.com/developer/onlineTraining/index.html

My lungs taste the air of Time
Blown past falling sands


  • TheRebell
  • Registratie: Oktober 2000
  • Laatst online: 01:58
een Javabean mag een constructor hebben, dit moet alleen een argument-loze constructor zijn... andrs is het geen Javabean maar gewoon een Java class

of je de Bean nu zelf aanmaakt of dat de Servlet laat doen maakt niets uit. Zoals iets eerder werd gezegd kun je het ook even vies doen met een expressie ahum, scriplet dus :+
code:
1
<% ... %>

maarja, dat is niet helemaal de bedoeling (alhoewel het wel werkt ;))

[ Voor 52% gewijzigd door TheRebell op 03-02-2004 11:27 ]


  • Apie!
  • Registratie: Januari 2000
  • Laatst online: 09-03 19:55

Apie!

Newer, better & confusinger

TheRebell schreef op 03 februari 2004 @ 10:35:
een Javabean mag een constructor hebben, dit moet alleen een argument-loze constructor zijn... andrs is het geen Javabean maar gewoon een Java class

of je de Bean nu zelf aanmaakt of dat de Servlet laat doen maakt niets uit. Zoals iets eerder werd gezegd kun je het ook even vies doen met een expressie
code:
1
<% ... %>

maarja, dat is niet helemaal de bedoeling (alhoewel het wel werkt ;))
een expressie is: <%= expression %>
wat jij bedoelt is een scriptlet: <% javacode %>

de <jsp:useBean> e.d. zijn er overigens om te voorkomen dat JSP's vol met javacode zouden komen te zitten. Dat is namelijk heel slecht leesbaar (javacode, expressions en html door elkaar -> spaghetti) en dus ook moeilijk om te onderhouden. Vandaar dat een jsp:useBean de voorkeur heeft boven een scriptlet. Als je zover bent zou ik ook kijken naar het gebruik van "custom tags".

Dit was eventjes ter verduidelijking van het "vies zijn" van het gebruik van <% %> :)

[ Voor 5% gewijzigd door Apie! op 03-02-2004 10:54 ]

My lungs taste the air of Time
Blown past falling sands


Verwijderd

offtopic
Dat boek heb ik verdorie een half jaar geleden voor school moeten kopen :X en nu is 'tie gratis te downloaden :(

Is BTW wel een redelijk goed boek om mee te starten

on topic:
Gewoon een constructor zonder args toevoegen en dan doet 'iet wel, (maar dat was al vermeld.)

[ Voor 25% gewijzigd door Verwijderd op 03-02-2004 19:53 ]


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Verwijderd schreef op 03 februari 2004 @ 19:42:
offtopic
Dat boek heb ik verdorie een half jaar geleden voor school moeten kopen :X en nu is 'tie gratis te downloaden :(

Is BTW wel een redelijk goed boek om mee te starten

on topic:
Gewoon een constructor zonder args toevoegen en dan doet 'iet wel, (maar dat was al vermeld.)
offtopic:
Nog leuker is dat het boek al veel langer te downloaden is. Ruim anderhalf jaar geleden heb ik hier al hoofdstukken voor school over moeten doorlezen.

[ Voor 3% gewijzigd door Woy op 04-02-2004 12:36 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”

Pagina: 1