Avatar billede r9 Nybegynder
07. maj 2002 - 16:14 Der er 8 kommentarer og
1 løsning

Generer HTML tabel udfra Java Objekt

Hejsa

Jeg har et Person Objekt med 5 attributer.
cprnr
fornavn
efternavn
adresse
tlfnr

Disse attributter er defult sat til null, men under runtime bliver der fyldt nogle værdier i dem.
Der er ikke sikkert at alle attributterne bliver udfyldt!!

Jeg skal bruge en metode der dynamisk generere en HTML tabel, alt efter hvor mange af atributterne der indeholder en værdi.
Tabellen skal i øverste række vise hvilke atributter der har en værdi, og i de efterfølgende rækker vise værdien.

output kunne f.eks. se sådan ud:

<table wudth="75%" border="0">
<tr>
<td>cprnr</td>
<td>fornavn</td>
<td>efternavn</td>
<td>adresse</td>
<td>tlfnr</td>
</tr>
<tr>
<td>123456-1234</td>
<td>tim</td>
<td>olsen</td>
<td>kastellet 6</td>
<td>12345678</td>
</tr>
</table>


MEN hvis det kun er fornavn & efternavn atributterne der indeholder en værdi, så skal tabellen jo se helt anderledes ud!


Er der nogle der kan lave dette?
Avatar billede disky Nybegynder
07. maj 2002 - 17:02 #1
Hejsa kig lidt på denne her, den virker har selv testet.



/*
* LavTabel.java
*
* Created on 7. maj 2002, 16:54
*/

/**
*
* @author  srr
* @version
*/
public class LavTabel
{
   
    private void addField(String field, StringBuffer sb)
    {
        if(field!=null && field.length()!=0)
        {
            sb.append("<td>"+field+"</td>\n");
        }
    }

    private void addHeader(String text, String field, StringBuffer sb)
    {
        if(field!=null && field.length()!=0)
        {
            sb.append("<td>"+text+"</td>\n");
        }
    }
   
    private String genererTabel(Person pers)
    {
        String fornavn=pers.getFornavn();
        String efternavn=pers.getEfternavn();
        String adresse=pers.getAdresse();
        String tlfnr=pers.getTlfnr();
        String cprnr=pers.getCprnr();
       
        StringBuffer res=new StringBuffer();
        res.append("<table width=\"75%\" border=\"0\">\n");
        res.append("<tr>\n");

        addHeader("cprnr",cprnr,res);
        addHeader("fornavn",fornavn,res);
        addHeader("efternavn",efternavn,res);
        addHeader("adresse",adresse,res);
        addHeader("tlfnr",tlfnr,res);
       
        res.append("</tr>\n");
        res.append("<tr>\n");
        addField(cprnr,res);
        addField(fornavn,res);
        addField(efternavn,res);
        addField(adresse,res);
        addField(tlfnr,res);
        res.append("</tr>\n");
        res.append("</table>\n");
        return res.toString();
    }
   
    /** Creates new LavTabel */
    public LavTabel()
    {
        Person mig=new Person();
        mig.setFornavn("Søren");
        mig.setEfternavn("Reinke");
//        mig.setAdresse("Gåserødvej 117");
        mig.setCprnr("12345");
        mig.setTlfnr("112");
       
        String tabel=genererTabel(mig);
        System.out.println(tabel);
    }
   
    /**
    * @param args the command line arguments
    */
    public static void main(String args[])
    {
        new LavTabel();
    }
   
}



/*
* Person.java
*
* Created on 7. maj 2002, 16:54
*/

/**
*
* @author  srr
* @version
*/
public class Person
{
   
    /** Holds value of property cprnr. */
    private String cprnr;
   
    /** Holds value of property fornavn. */
    private String fornavn;
   
    /** Holds value of property efternavn. */
    private String efternavn;
   
    /** Holds value of property adresse. */
    private String adresse;
   
    /** Holds value of property tlfnr. */
    private String tlfnr;
   
    /** Creates new Person */
    public Person()
    {
    }
   
    /** Getter for property cprnr.
    * @return Value of property cprnr.
    */
    public String getCprnr()
    {
        return cprnr;
    }
   
    /** Setter for property cprnr.
    * @param cprnr New value of property cprnr.
    */
    public void setCprnr(String cprnr)
    {
        this.cprnr = cprnr;
    }
   
    /** Getter for property fornavn.
    * @return Value of property fornavn.
    */
    public String getFornavn()
    {
        return fornavn;
    }
   
    /** Setter for property fornavn.
    * @param fornavn New value of property fornavn.
    */
    public void setFornavn(String fornavn)
    {
        this.fornavn = fornavn;
    }
   
    /** Getter for property efternavn.
    * @return Value of property efternavn.
    */
    public String getEfternavn()
    {
        return efternavn;
    }
   
    /** Setter for property efternavn.
    * @param efternavn New value of property efternavn.
    */
    public void setEfternavn(String efternavn)
    {
        this.efternavn = efternavn;
    }
   
    /** Getter for property adresse.
    * @return Value of property adresse.
    */
    public String getAdresse()
    {
        return adresse;
    }
   
    /** Setter for property adresse.
    * @param adresse New value of property adresse.
    */
    public void setAdresse(String adresse)
    {
        this.adresse = adresse;
    }
   
    /** Getter for property tlfnr.
    * @return Value of property tlfnr.
    */
    public String getTlfnr()
    {
        return tlfnr;
    }
   
    /** Setter for property tlfnr.
    * @param tlfnr New value of property tlfnr.
    */
    public void setTlfnr(String tlfnr)
    {
        this.tlfnr = tlfnr;
    }
   
}
Avatar billede r9 Nybegynder
07. maj 2002 - 18:22 #2
det ser umiddelbart rigtig godt ud.

Jeg tester det senere, og vender tilbage i aften.
Avatar billede r9 Nybegynder
08. maj 2002 - 08:26 #3
det virker fint, og pointene er dine, men jeg har lige et lille tillægsspørgsmål:

Hvis nu jeg har en vector som indeholder mange Person-Objekter, hvordan får jeg så udskrevet en række pr. Person-Objekt?
(vi antager at objekterne er ens, det er blot værdierne der er forskellige)
Avatar billede disky Nybegynder
08. maj 2002 - 09:18 #4
Brug denne LavTabel klasse istedet.


/*
* LavTabel.java
*
* Created on 7. maj 2002, 16:54
*/

import java.util.*;

/**
*
* @author  srr
* @version
*/
public class LavTabel
{
   
    private void addField(String field, StringBuffer sb)
    {
        if(field!=null && field.length()!=0)
        {
            sb.append("<td>"+field+"</td>\n");
        }
    }
   
    private void addHeader(String text, String field, StringBuffer sb)
    {
        if(field!=null && field.length()!=0)
        {
            sb.append("<td>"+text+"</td>\n");
        }
    }
   
    private String genererTabel(List list)
    {
        String fornavn;
        String efternavn;
        String adresse;
        String tlfnr;
        String cprnr;
       
        StringBuffer res=new StringBuffer();
        res.append("<table width=\"75%\" border=\"0\">\n");
       
        Iterator iter=list.iterator();
        while(iter.hasNext())
        {
            res.append("<tr>\n");
            Person pers=(Person)iter.next();
            fornavn=pers.getFornavn();
            efternavn=pers.getEfternavn();
            adresse=pers.getAdresse();
            tlfnr=pers.getTlfnr();
            cprnr=pers.getCprnr();
           
           
            addHeader("cprnr",cprnr,res);
            addHeader("fornavn",fornavn,res);
            addHeader("efternavn",efternavn,res);
            addHeader("adresse",adresse,res);
            addHeader("tlfnr",tlfnr,res);
           
            res.append("</tr>\n");
            res.append("<tr>\n");
            addField(cprnr,res);
            addField(fornavn,res);
            addField(efternavn,res);
            addField(adresse,res);
            addField(tlfnr,res);
            res.append("</tr>\n");
        }
        res.append("</table>\n");
       
        return res.toString();
    }
   
    /** Creates new LavTabel */
    public LavTabel()
    {
        List list=new Vector();
       
        Person mig=new Person();
        mig.setFornavn("Søren");
        mig.setEfternavn("Reinke");
        //        mig.setAdresse("Gåserødvej 117");
        mig.setCprnr("12345");
        mig.setTlfnr("112");
       
        list.add(mig);
        mig.setFornavn("Hans");
        mig.setEfternavn("Hansen");
        mig.setCprnr("7575757575");
        mig.setAdresse("månen");
        mig.setTlfnr("99999");
        list.add(mig);
       
        String tabel=genererTabel(list);
        System.out.println(tabel);
    }
   
    /**
    * @param args the command line arguments
    */
    public static void main(String args[])
    {
        new LavTabel();
    }
   
}
Avatar billede r9 Nybegynder
08. maj 2002 - 10:20 #5
hvad laver du her: List list=new Vector();?

en liste i en vector?
Avatar billede disky Nybegynder
08. maj 2002 - 10:45 #6
Nej, det er den korrekte måde at instantiere en Vector på.

List er super klassen til Vector, men ved at skrive

List vect=new Vector();
istedet for
Vector vect=new Vector();

Så får man muligheden for at udskifte Vector med den hurtigere udgave som hedder ArrayList ved bare at skrive:
List vect=new ArrayList();

Det kan du ikke gøre hvis du skriver Vector vect=new Vector(); da alle metode kald så også skal ændres.

Sun specificerer selv at man altid skal bruge Super klassen hvis det er muligt.
Avatar billede r9 Nybegynder
08. maj 2002 - 10:46 #7
ok. takker.
Avatar billede r9 Nybegynder
08. maj 2002 - 11:31 #8
>>disky

har du haft problemmer med at Resin nogle gange "hænger", når man prøver at udføre nogle db-kald?

Hvis man så marker dos-vinduet(resin's), og trykker ENTER, så kører det igen. Ellers skal man lige genstarte resin.

Er det noget du kender til?
En bug?
Avatar billede disky Nybegynder
08. maj 2002 - 13:28 #9
Nope det har jeg ikke oplevet.

Det skal siges da jeg brugte resin på win2k server, kørte den som en service i baggrunden, uden problemmer.
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