Avatar billede noerdar-dilling Nybegynder
26. maj 2005 - 22:49 Der er 34 kommentarer og
1 løsning

Fejl ved brug af en firePropertyChangeListener

Den siger følgende i compileren, men jeg syntes jeg anvender eksemplet rigtigt.


The method addPropertyChangeListener(ScreenLogListener) is undefined for the type kunde opretKunde.java line 25
Avatar billede noerdar-dilling Nybegynder
26. maj 2005 - 22:51 #1
Jeg har følgende filer screenLogListener

_______________________________________

package kunde;

import java.beans.*;

public class ScreenLogListener implements PropertyChangeListener {
 

  public ScreenLogListener() {
  }
 
  public void propertyChange(PropertyChangeEvent evt) {
    System.err.print("Source: " + evt.getSource() + " Property name: " + evt.getPropertyName() + " Old value: " + evt.getOldValue() + " New value: " + evt.getNewValue());
  }
 
}
Avatar billede noerdar-dilling Nybegynder
26. maj 2005 - 22:51 #2
min kunde bean

________________________

//Pakken denne klasse er uder i hirakiet

package kunde;

import java.beans.*;

public class kunde implements java.io.Serializable {
   
//Variabler til klasse kunde. En bean

private PropertyChangeSupport propertySupport;
int id;
String firmaNavn;
String adresse;
int tlf;
String email;
int status;
 
//Tom konstruktør uden parameteroverførsler

public kunde() {
propertySupport = new PropertyChangeSupport(this);   
    }

//Konstruktør med parametreoverførsel (Til kunde Id parameteroverførsel)

public kunde(int id) {

  this.id = id;

                } 

//Konstruktør med parametreoverførsel (Til fuld kunde)

public kunde(int id, String firmaNavn, String adresse, int tlf, String email, int status) {

      this.id = id;
      this.firmaNavn = firmaNavn;
      this.adresse = adresse;
      this.tlf = tlf;
      this.email = email;
      this.status = status;

                  } 

//Konstruktør med parametreoverførsel (Til funktion af alle kunder)

public kunde(int id, String firmaNavn) {
      this.id = id;
  this.firmaNavn = firmaNavn;


                }

//Get metoder

    public int getid() {
        return id;
    }
   
    public String getfirmaNavn() {
        return this.firmaNavn;
    }
   
    public String getadresse() {
        return adresse;
    }
   
    public int gettlf() {
        return tlf;
    }
   
    public int getstatus() {
        return status;
    }
   
    public String getemail() {
        return email;
    }
   
   
//Set metoder
   
    public void setid(int id) {
        this.id = id;
        }

    public void setfirmaNanvn(String firmaNavn) {
        String oldId = this.firmaNavn;
        this.firmaNavn = firmaNavn;
        propertySupport.firePropertyChange("firmaNavn", oldId, firmaNavn);
        }
   
    public void setadresse(String adresse) {
        this.adresse = adresse;
        }
   
    public void settlf(int tlf) {
        this.tlf = tlf;
        }
   
    public void setstatus(int status) {
        this.status = status;
        }
   
    public void setemail(String email) {
        this.email = email;
        }

    } //afslutne braket for klassen
Avatar billede noerdar-dilling Nybegynder
26. maj 2005 - 22:52 #3
I min app der egentlig er en servlet vil jeg bare udskrive til konsollen de gamle og nye værdier for firmaNavn, når dette ændres ved opretelse af ny kunde
Avatar billede arne_v Ekspert
26. maj 2005 - 22:53 #4
hvad er opretKunde.java line 25 ?
Avatar billede noerdar-dilling Nybegynder
26. maj 2005 - 22:53 #5
Det kunne f.eks. være

kunde enKunde = new kunde(idIn, firmaNavnIn, adresseIn, tlfIn, emailIn, statusIn);
Avatar billede noerdar-dilling Nybegynder
26. maj 2005 - 22:55 #6
Finder jeg lige ud af
Avatar billede noerdar-dilling Nybegynder
26. maj 2005 - 22:57 #7
kunde enKunde = new kunde(kundenId, kundeFirmaNavn, kundeadresse, kundetlf, kundeEmail, status);
enKunde.addPropertyChangeListener(new ScreenLogListener()); = linie 112 var det
Avatar billede noerdar-dilling Nybegynder
26. maj 2005 - 22:58 #8
Den siger det her

__________---


The method addPropertyChangeListener(ScreenLogListener) is undefined for the type kunde opretKunde.java line 112
Avatar billede noerdar-dilling Nybegynder
26. maj 2005 - 22:59 #9
Måske er min kunde.java forkert, men kan ikke se hvorfor?
Avatar billede arne_v Ekspert
26. maj 2005 - 23:00 #10
jeg kan heller ikke se en addPropertyChangeListener metode i kunde klassen
Avatar billede noerdar-dilling Nybegynder
26. maj 2005 - 23:02 #11
Nej hvor er jeg dum. Men tak for at gøre mig opmærksom på min bøler. Tales arne. Send et svar.
Avatar billede arne_v Ekspert
26. maj 2005 - 23:04 #12
ok
Avatar billede noerdar-dilling Nybegynder
26. maj 2005 - 23:06 #13
Hvorfor får jeg ikke skrevet noget ud i konsollen efter jeg har tilføjet metoderne.

se lige min kunde klasse

________________________________________

//Pakken denne klasse er uder i hirakiet

package kunde;

import java.beans.*;

public class kunde implements java.io.Serializable {
   
//Variabler til klasse kunde. En bean

private PropertyChangeSupport propertySupport;
int id;
String firmaNavn;
String adresse;
int tlf;
String email;
int status;
 
//Tom konstruktør uden parameteroverførsler

public kunde() {
propertySupport = new PropertyChangeSupport(this);   
    }

//Konstruktør med parametreoverførsel (Til kunde Id parameteroverførsel)

public kunde(int id) {
      propertySupport = new PropertyChangeSupport(this);
  this.id = id;

                } 

//Konstruktør med parametreoverførsel (Til fuld kunde)

public kunde(int id, String firmaNavn, String adresse, int tlf, String email, int status) {
      propertySupport = new PropertyChangeSupport(this);
      this.id = id;
      this.firmaNavn = firmaNavn;
      this.adresse = adresse;
      this.tlf = tlf;
      this.email = email;
      this.status = status;

                  } 

//Konstruktør med parametreoverførsel (Til funktion af alle kunder)

public kunde(int id, String firmaNavn) {
          propertySupport = new PropertyChangeSupport(this);
      this.id = id;
      this.firmaNavn = firmaNavn;


                }

//Get metoder

    public int getid() {
        return id;
    }
   
    public String getfirmaNavn() {
        return this.firmaNavn;
    }
   
    public String getadresse() {
        return adresse;
    }
   
    public int gettlf() {
        return tlf;
    }
   
    public int getstatus() {
        return status;
    }
   
    public String getemail() {
        return email;
    }
   
   
//Set metoder
   
    public void setid(int id) {
        this.id = id;
        }

    public void setfirmaNanvn(String firmaNavn) {
        String oldId = this.firmaNavn;
        this.firmaNavn = firmaNavn;
        propertySupport.firePropertyChange("firmaNavn", oldId, firmaNavn);
        }
   
    public void setadresse(String adresse) {
        this.adresse = adresse;
        }
   
    public void settlf(int tlf) {
        this.tlf = tlf;
        }
   
    public void setstatus(int status) {
        this.status = status;
        }
   
    public void setemail(String email) {
        this.email = email;
        }
   
    public void addPropertyChangeListener(PropertyChangeListener listener) {
        propertySupport.addPropertyChangeListener(listener);
      }
     
      public void removePropertyChangeListener(PropertyChangeListener listener) {
        propertySupport.removePropertyChangeListener(listener);
      } 
     
      public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) {
        propertySupport.addPropertyChangeListener(propertyName, listener);
      }

    } //afslutne braket for klassen
Avatar billede arne_v Ekspert
26. maj 2005 - 23:11 #14
det har jeg godtnok svært ved at gennemskue

kan du ikke teste din bean i en lille standalone test applikation inden
du deployer den i J2EE kontekst ?

så må det være noget nemmere at tracke fejlen !
Avatar billede noerdar-dilling Nybegynder
26. maj 2005 - 23:13 #15
ok laver lige en
Avatar billede noerdar-dilling Nybegynder
26. maj 2005 - 23:19 #16
ok setfirmaNavn var skrevet forkert ved ikke om det har en effekt
Avatar billede noerdar-dilling Nybegynder
26. maj 2005 - 23:20 #17
Virker fint med denne App, men ikke i servletten

_________________

/*
* Created on 2005-05-26
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package kunde;

import javax.swing.*;

/*
* AccountBoundApp.java
*
* Created on 6. februar 2005, 19:57
*/

/**
*
* @author  andersb
*/
public class kundeApp {
 
  public static void main(String[] args) {
    kunde kun = new kunde();
    kun.addPropertyChangeListener(new ScreenLogListener());
    kun.setfirmaNavn("Test1");

   
    String firmaNavn = JOptionPane.showInputDialog(null, "New FIRMANAVN");
    while (firmaNavn != null) {
      kun.setfirmaNavn(firmaNavn);
      firmaNavn = JOptionPane.showInputDialog(null, "New FirmaNavn");
    }
  }
 
}
Avatar billede arne_v Ekspert
26. maj 2005 - 23:23 #18
og du kigger på det sorte Tomcat eller JBoss console vindue ?
Avatar billede noerdar-dilling Nybegynder
26. maj 2005 - 23:25 #19
JBoss console ved kundeApp og Tomcat ved servletten
Avatar billede noerdar-dilling Nybegynder
26. maj 2005 - 23:29 #20
Her er min opretKunde

___________________________________


package kunde;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import db.dbConnect;
import java.sql.*;
import java.util.ArrayList;


public class opretKunde extends HttpServlet {
   
   
   
    public void init(ServletConfig conf) throws ServletException  {
            super.init(conf);
 
}

public void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String action = request.getParameter("action");

if(action.equals("opretKunde"))    {

    int id = 0;
    String firmaNavn = "";
    String adresse = "";
    int tlf = 0;
    String email = "";
    int status = 0;

firmaNavn = request.getParameter("firmaNavn");
adresse = request.getParameter("adresse");
String tlfInput = request.getParameter("tlf");   
email = request.getParameter("email");


int firmaNavnLenght = firmaNavn.length();
int adresseLength = adresse.length();
int emailLenght = email.length();
int tlfLength = tlfInput.length();

if(firmaNavnLenght <=0 || adresseLength <=0 || tlfLength <=0 || emailLenght <=0 ) {
   
    getServletConfig().getServletContext().getRequestDispatcher("/noKundeinfo.jsp").forward(request, response);

} else

   
   
    try {
       
        tlf = Integer.parseInt(tlfInput);       
    }
    catch (Exception e) {
   
        getServletConfig().getServletContext().getRequestDispatcher("/noNumber.jsp").forward(request, response);
        }
   
    try {
       
dbConnect dbCon = new dbConnect();
Connection con = dbCon.getConnection();
Statement stmt = con.createStatement();

ResultSet kundeIndb = stmt.executeQuery("SELECT tlf FROM kunder WHERE tlf = '" + tlf + "'");     

if(!kundeIndb.next()) {
   
    kundeIndb.close();
    stmt.close();

Statement kundeInsert = con.createStatement();

int tilføjKunde = kundeInsert.executeUpdate
("INSERT INTO kunder (firmaNavn, adresse, tlf, email) VALUES ('" + firmaNavn + "', '" + adresse + "', '" + tlf + "', '" + email + "')");

kundeInsert.close();


Statement newKundeid = con.createStatement();

ResultSet newId = newKundeid.executeQuery("SELECT id FROM kunder WHERE tlf = '" + tlf + "'");

newId.next();

int getIdkunde = newId.getInt(1);
newId.close();
newKundeid.close();

ID etID = new ID(getIdkunde);
ArrayList idListe = new ArrayList();
idListe.add(etID);

Statement getKunde = con.createStatement();
ResultSet kunden = getKunde.executeQuery("SELECT id, firmaNavn, adresse, tlf, email FROM kunder WHERE tlf = '" + tlf + "'");

while(kunden.next())    {


int kundenId= kunden.getInt(1);
String kundeFirmaNavn = kunden.getString(2);
String kundeadresse = kunden.getString(3);
int kundetlf = kunden.getInt(4);
String kundeEmail = kunden.getString(5);

ArrayList kundeOprettet = new ArrayList();

kunde enKunde = new kunde(kundenId, kundeFirmaNavn, kundeadresse, kundetlf, kundeEmail, status);

enKunde.addPropertyChangeListener(new ScreenLogListener());  // Her skulle den gerne fange at forskellige værdier bliver ændret og skrive det gamle firmananv og herefter det nye

kundeOprettet.add(enKunde);

request.setAttribute("kundeOprettet", kundeOprettet);

}




request.setAttribute("opret", "done");
request.setAttribute("idListe", idListe);


con.close();

getServletConfig().getServletContext().getRequestDispatcher("/kundeOprettet.jsp").forward(request, response);
   
}

else    {

Statement getOldkunde = con.createStatement();

ResultSet getkunde = getOldkunde.executeQuery("SELECT id, firmaNavn, adresse, tlf, email, status FROM kunder WHERE tlf = '" + tlf + "'");

getkunde.next();

int idIn = getkunde.getInt(1);
String firmaNavnIn = getkunde.getString(2);
String adresseIn = getkunde.getString(3);
int tlfIn = getkunde.getInt(4);
String emailIn = getkunde.getString(5);
int statusIn = getkunde.getInt(6);



ArrayList kundeOld = new ArrayList();

kunde enKunde = new kunde(idIn, firmaNavnIn, adresseIn, tlfIn, emailIn, statusIn);

kundeOld.add(enKunde);    

request.setAttribute("kundeOld", kundeOld);
   
getServletConfig().getServletContext().getRequestDispatcher("/kundeOld.jsp").forward(request, response);
   
}
   
} catch (Exception e) {
  System.err.println(e);
}


            }

        }
}
Avatar billede noerdar-dilling Nybegynder
26. maj 2005 - 23:30 #21
kunde enKunde = new kunde(kundenId, kundeFirmaNavn, kundeadresse, kundetlf, kundeEmail, status);

enKunde.addPropertyChangeListener(new ScreenLogListener());  // Her skulle den gerne fange at forskellige værdier bliver ændret og skrive det gamle firmananv og herefter det nye
Avatar billede noerdar-dilling Nybegynder
26. maj 2005 - 23:37 #22
Forsvandt du
Avatar billede arne_v Ekspert
26. maj 2005 - 23:37 #23
jo men

bliver der ikke oprettet en ny instans af enKunde for hvert kald ?

det nytter jo ikke meget at sætte en listener på et objekt som ryger ud
af scope og bliver garbage collectet
Avatar billede arne_v Ekspert
26. maj 2005 - 23:39 #24
ArrayList kundeOprettet = new ArrayList(); // opretter array list

kunde enKunde = new kunde(kundenId, kundeFirmaNavn, kundeadresse, kundetlf, kundeEmail, status); // <---- opretter kunde

enKunde.addPropertyChangeListener(new ScreenLogListener());  // sætter listener på

kundeOprettet.add(enKunde); // tilføjer kunde til array list

request.setAttribute("kundeOprettet", kundeOprettet); // gemmer array list i request

men når requesten er afsluttet så ryger request objet + array list + kunde
Avatar billede noerdar-dilling Nybegynder
26. maj 2005 - 23:44 #25
ok men hvordan kan jeg illustrerer at hver gang man opretter en kunde så skriver det gamle firmaNavn, samt det nye i tomcat konsollen. Skla nemlig bare vise et eksempel med denne funktion.
Avatar billede noerdar-dilling Nybegynder
26. maj 2005 - 23:45 #26
Kan jeg flytte det ud i klassen på en snedig måde eller hvordan kan jeg gøre??
Avatar billede arne_v Ekspert
26. maj 2005 - 23:49 #27
en opretKunde servlet kan vel kun udskrive et nyt navn

en modificerKunde servlet kan udskrive det gamle og det nye navn

hvad med en simpel løsning ?

System.err.println før/efter execute af INSERT, UPDATE og DELETE ?
Avatar billede arne_v Ekspert
26. maj 2005 - 23:50 #28
og jeg forsvinder snart !

:-)
Avatar billede noerdar-dilling Nybegynder
26. maj 2005 - 23:50 #29
Hvordan skal jeg forstå det
Avatar billede noerdar-dilling Nybegynder
26. maj 2005 - 23:54 #30
Godnat bare glem det. Går nok alligevel
Avatar billede arne_v Ekspert
26. maj 2005 - 23:55 #31
int tilføjKunde = kundeInsert.executeUpdate
("INSERT INTO kunder (firmaNavn, adresse, tlf, email) VALUES ('" + firmaNavn + "', '" + adresse + "', '" + tlf + "', '" + email + "')");
System.err.println("vi har nu indsat " + firmaNavn);

uden brug af property listener
Avatar billede arne_v Ekspert
26. maj 2005 - 23:57 #32
og tilsvarende ved update

den property listener en smart hvis bean objekterne eksisterer i lang tid

hvis f.eks. du cachede alle kunderne i en HashMap som var gemt i application
objektet

så kunne du lade diverse servlet kald opdatere i den cache og bruge
property listener til at styre gem i databasen med
Avatar billede noerdar-dilling Nybegynder
27. maj 2005 - 00:04 #33
Tak
Avatar billede noerdar-dilling Nybegynder
27. maj 2005 - 00:07 #34
ok hvordan er det nu man laver et array der hvor kun en bestemt type objekter kan indsættes
Avatar billede arne_v Ekspert
27. maj 2005 - 07:22 #35
array med fast størrelse:

X[] a = new X[N];

ArrayList dynamisk men uden type check:

ArrayList[] a = new ArrayList();

dynamisk med type check Java 1.5 og nyere:

ArrayList<X>[] a = new ArrayList<X>();

dynamisk med type check før Java 1.5:

MinKlasseSomWrapperArrayList[] a = new MinKlasseSomWrapperArrayList();
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