Toon posts:

[JSP/JavaBeans]Bean meermaals aanroepen vanuit while loop?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hey,
Ik ben laatstejaarsstudent informatica en moet voor men eindwerk een applicatie schrijven in JSP/Beans.
Dit is tot nu toe redelijk vlotjes gegaan... maar ik zit nu al hele tijd te zoeken op een probleem, en snap niet wat er fout loopt :(
via google ook niet echt iets behulpzaam gevonden, dus richt ik me eens tot de pro-programmers hier :)

Eerst de code:
Dit is de JSP pagina van waaruit ik MailerBean probeer te gebruiken met behulp van jsp:useBean
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// selecteert alle bugs met is_changed = 1 en die ook voorkomen in tabel van emails
String sql = "SELECT * FROM bugs WHERE bug_id IN (SELECT bug_id FROM emails) AND is_changed = 1";
java.sql.ResultSet rs = null;
rs = openrs( stat, sql);
while ( rs.next() ) 
{
    //door de resultset lopen en voor elke bug een juist subject en message maken aan de hand van de gegevens uit de tabel
    String subject = "UPDATE betreffende bug '" + rs.getString("bug_name") + "'";            
    String message = "Deze email werd u automatisch toegestuurd door de administrator bij JSP Reporting Tool\nU hebt zich ingeschreven om op de hoogte gehouden te worden omtrent de bug '"+rs.getString("bug_name") + "'\nDit zijn de laatste beschikbare gegevens:\nNaam: " + rs.getString("bug_name") + "\nBeschrijving: " + rs.getString("bug_desc") + "\nOplossing: "+ rs.getString("resolution") +"\nVoor meer informatie gelieve u aan te melden op JSP Reporting Tool\n\nMet vriendelijke groeten,\nHet JSP Reporting Tool administratie-team";
    out.println("Mail subject: "+ subject + "<br>");
    %>
    <jsp:useBean id="mailer" class="mail.MailerBean">
        <jsp:setProperty name="mailer" property="to" value="myemailadress@mail.com"/>
        <jsp:setProperty name="mailer" property="from" value="noreply@mail.com"/>
        <jsp:setProperty name="mailer" property="subject" value="<%= subject %>"/>
        <jsp:setProperty name="mailer" property="message" value="<%= message %>"/>      
        <% mailer.sendMail(); 
        out.println("Mail verstuurd!<br><br>");%>
    </jsp:useBean>
    <%
}

En hier de Bean om mails te versturen
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package mail;

import java.io.*;
import java.util.*;
import javax.mail.*;
import javax.mail.event.*;
import javax.mail.internet.*;

public final class MailerBean extends Object implements Serializable {
    
    private String to = null;
    private String from = null;
    private String subject = null;
    private String message = null;
    public static Properties props = null;
    public static Session session = null;

    static {
        /*  Setting Properties for STMP host */
        props = System.getProperties();
        props.put("mail.smtp.host", "uit.telenet.be");
        session = Session.getDefaultInstance(props, null);
    }

    public void setTo(String to) {
        this.to = to;
    }

    public void setFrom(String from) {
        this.from = from;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    public void setMessage(String message) {
        this.message = message;
    }
    
    public void sendMail() throws Exception {
        if(!this.everythingIsSet())
            throw new Exception("Could not send email.");
        try {
            MimeMessage message = new MimeMessage(session);
            message.setRecipient(Message.RecipientType.TO, 
                new InternetAddress(this.to));
            message.setFrom(new InternetAddress(this.from));
            message.setSubject(this.subject);
            message.setText(this.message);
            Transport.send(message);
        } catch (MessagingException e) {
            throw new Exception(e.getMessage());
        }
    }

    private boolean everythingIsSet() {
        if((this.to == null) || (this.from == null) || 
           (this.subject == null) || (this.message == null))
            return false;

        if((this.to.indexOf("@") == -1) ||
            (this.to.indexOf(".") == -1))
            return false;

        if((this.from.indexOf("@") == -1) ||
            (this.from.indexOf(".") == -1))
            return false;

        return true;
    }
}


Sorry als de code wat lang of onoverzichtelijk is, maar hier een woordje uitleg:
Het onderste gedeelte is een MailberBean die in staat is emails te versturen. Deze is getest en doet het gewoon. Het bovenste gedeelte is de JSP pagina van waaruit ik probeer de Bean aan te roepen, als dit eenmalig gebeurt, dus gewoon usebean gebruiken, dan properties setten en dan mailer.sendMail(); aanroepen werkt dit ook gewoon netjes.
Nu is mijn probleem echter dat ik meerdere mails te versturen heb, ik dacht dit dus van in een while lus te doen, zo de Result Set te doorlopen, de subject en message opbouwen en dan telkens die MailerBean aanroepen. Dit gebeurt allemaal correct, tot als de Bean aangeroepen werd. Als ik bijvoorbeeld 5 maal door de while lus ga, krijg ik dus 5 maal het correcte subject en message, maar alleen de eerste keer wordt de mail ook werkelijk gestuurd. Het lijkt wel dat de 2de, 3de, enz... keer dat door de while lus gegaan wordt die aanroep van de MailerBean er gewoon niet staat :|

Ik hoop dat de code en uitleg een beetje duidelijk is...
Ik ben relatief nieuw in deze dingen, misschien doe ik wel iets helemaal verkeerd... alle hulp is welkom!
Dank bij voorbaat :)

[ Voor 15% gewijzigd door Verwijderd op 16-05-2006 16:51 ]


Verwijderd

Topicstarter
probleem is intussen opgelost :D
heel toevallig met wat zitten proberen...
Die useBean slechts eenmalig zetten buiten de while lus, en vervolgens in de while alleen maar de setProperties aanpassen... and that did the trick :)

  • momania
  • Registratie: Mei 2000
  • Laatst online: 13:11

momania

iPhone 30! Bam!

Welke richting is dit qua informatica opleiding?

Als dit de stof is die jullie in het laatste jaar als student krijgen, hoop ik niet voor je na je opleiding gelijk als programmeur aan de slag wilt.
Want dan heb je nog een hooooop bij (eigenlijk af) te leren.

* momania maakt zich steeds meer zorgen om de kwaliteit van sommige opleidingen. :X

Neem je whisky mee, is het te weinig... *zucht*


  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Blweelkk, SQL queries in je JSP... ;)

Maar serieus, het is niet echt netjes om rechtstreeks in je pagina queries te draaien.
Ik zal niet gaan lopen beweren dat je meteen JSF of STRUTS moet gaan gebruiken, maar ik zou absoluut die query in een methode verstoppen.

Daar scoor je punten mee bij de docent. Dingen als lagenmodellen en zo gaan brullen, scheiding van verantwoordelijkheden. Dat vinden ze prachtig, die docenten. :+ (ik ook trouwens)

Fat Pizza's pizza, they are big and they are cheezy


Verwijderd

Topicstarter
momania schreef op dinsdag 16 mei 2006 @ 21:55:
Welke richting is dit qua informatica opleiding?

Als dit de stof is die jullie in het laatste jaar als student krijgen, hoop ik niet voor je na je opleiding gelijk als programmeur aan de slag wilt.
Toegepaste informatica met specialisatie in Netwerken ;)
en neen dit is geen leerstof, wij hebben nooit jsp/Beans gezien... eindwerk maken is dus zelf al die dingen uitzoeken... met de bijbehorende experimentjes qua code

Wat die query in de code betreft, het is zeker niet de bedoeling da die daar blijft staan hoor. Dit stukje code diende enkel om uit te zoeken hoe die useBean precies te gebruiken.
tnx voor advies in ieder geval ;)