Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: HTML-lomake ja JSP (Java)

slitzu [30.06.2006 13:02:38]

#

Otan lomakkeelta muutamia parametrejä java-pavulle. Jostain syystä tapa1 toimii mut tapa2 ilmoittaa näiden arvojen arvoksi NULL.

Tapa1:

public void setToName(String prm) {
     toName = prm;
}

public void setMessage(String message) {
     this.message = message + " ystäväni " + toName + "!";
}

ja sit tulostetaan tuo this.message ja kaikki arvot tulee oikein.

Tapa 2:

public void setToName(String prm) {
     toName = prm;
}

public String message = "Arvoisa " + toName;

ja tulostuksessa tulee Arvoisa NULL.

Missä mahtaa olla vika?

Mod. edit: kooditagit

anttipanda [30.06.2006 15:46:50]

#

Kun papu-olio luodaan, tavassa kaksi suoritetaan rivi "public String message = "Arvoisa " + toName;" täsmälleen kerran. Tällä hetkellä toName-muuttujan arvo on NULL, jos et ole alustanut sitä sen määrittelyn yhteydessä. Tuota riviä ei suoriteta enää ikinä pavun elinaikana.

Tämän takia, vaikka muuttaisit toName-muuttujan arvoa, ei message-muuttuja muuta arvoaan automaattisesti.

Toivottavasti vastauksesta sai selvää.

Minusta hyvä tapa olisi tehdä seuraavasti: määrittelet muuttujat toName ja message kuten olet tehnytkin. Teet niille setterit, jotka EIVÄT TEE MUUTA kuin asettavat muuttujiin uudet arvot. Sitten teet metodin, jolla saadaan haettua muotoiltu viesti, ja vasta siellä muokkaat viestin ja palautat sen.

slitzu [03.07.2006 09:11:06]

#

Ei onnistu. Yhä edelleen tulee null-arvoja. Tajuan kyllä mitä tarkoitat, anttipanda. :)

Tarkoituksena on siis tehdä mailinlähetysskripti jsp:llä, jossa osoitteet ja nimet otetaan talteen html-lomakkeelta MUTTA varsinainen viesti on valmiina skriptissä. Tapa 1:ssä tuo viestikin otettiin lomakkeelta, ja kaikki toimi hyvin, mutta Tapa 2:ssa kun yritän luoda viestin vasta pavun sisällä, lähtee viesti hyvin, mutta muut kentät saavat null-arvoja.

anttipanda [03.07.2006 12:15:23]

#

No juu. En tiedä minkälainen rakenne sovelluksessasi on (ja seuraava esimerkki on muutenkin päin ptä), mutta minä teksisin asian näin (javan syntaksi on unohtunut, joten älä kiinnitä siihen niin suurta huomiota ;) ):

//viesti, ja siinä mukana formataatti-info
private String messageFormat = "Arvoisa ystäväni %s!";
private String name = "unknown";

public void setName(String name)
{
     try
     {
          this.name = validateUserInput(name); //muistathan aina tarkistaa käyttäjän syötteet! Mieti mitä tapahtuu, jos päästät tarkistamatonta syötettä nettisivulle (ihan mitä vaan!).
     }
     catch
     {
          //käsittele virhe täällä
     }
}

private void validateUserInput(String messsage)
{
     //tarkista pituus
     //muuta kaikki html-erikoismerkit html-koodisarjoiksi
     //tarkista syötteen oikea muoto
     //jos et voi hyväksyä syötettä edes muokattuna, heitä poikkeus
}

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

public String getMessage()
{
     //muokataan tuloste käyttäjälle
     return String.format(this.message, this.name);
}

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta