[JSP] Validatie met bean

Pagina: 1
Acties:

  • Tootoo
  • Registratie: Augustus 2003
  • Laatst online: 29-08-2025

Tootoo

Folding extremist

Topicstarter
Hoi allen,

Vandaag vond ik het weer eens een dag om te gaan prutsen met JSP en kwam op het volgende probleem.

Ik heb een textfield tfd_Bericht. Ik wil graag kijken of deze leeg is of niet.

Dus ik heb een boontje aangemaakt, met de volgende code:

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
package EigenBoontjes;

import java.beans.*;
import java.util.*;
import java.io.Serializable;

public class controlerenBericht extends Object implements Serializable {
         
    private String bericht;
        
    public controlerenBericht() {
        this.bericht = "";
    }
    
    public void setBericht(String nieuwBericht) {
        this.bericht = nieuwBericht;
    }
    
    public String getBericht() {
        return this.bericht );
    }
    
    public boolean isBerichtValid() {
        
                
        if (this.bericht != null && this.bericht != "") {
            return true;
        }
        
        return false;
    }
}


in mijn jsp roep ik hem op met het volgende:
code:
1
<jsp:useBean id="berichtje" class="EigenBoontjes.controlerenBericht" />
Nog geen probleem.

Nu wil ik graag eerst de property bericht een waarde geven:
code:
1
<jsp:setProperty name="berichtje" property="bericht" value="${param.tfd_Bericht}" />

Nu krijg ik alleen het volgende: in plaats van dat hij de inhoud van het textfield pakt, geeft hij letterlijk die code als waarde? Dus mijn 1e vraag is: waarom? Waarom pakt hij niet de inhoud van dat textfield?

Maar goed, ik verander de code om de property bericht een waarde te geven:
code:
1
<c:set target="${berichtje}" property="bericht" value="${ param.tfd_Bericht}" />


Dan wordt de property bericht van de juiste waarde voorzien. Mooi denk je, dan nu de validatie. Deze doe ik dmv de volgende code:
code:
1
2
3
4
5
<c:if test="${ berichtje.berichtValid == false }">
          <jsp:forward page="error.jsp">
            <jsp:param name="error" value="geenBericht" />
          </jsp:forward>
        </c:if>


Het vreemde dan: of ik nu het textfield een waarde geef of niet, hij gaat nooit naar error.jsp toe? Dus om te kijken of mijn validatie wel ok is, heb ik opnieuw die <jsp:setProperty> gebruikt.
Gebruik ik
code:
1
<jsp:setProperty name="berichtje" property="bericht" value="testje" />
dan gaat ie niet naar error.jsp (wat ook niet zou moeten).
Gebruik ik
code:
1
<jsp:setProperty name="berichtje" property="bericht" value="" />
dan gaat ie naar error.jsp (wat ook zou moeten).

Toen brak uiteindelijk mijn klomp... Ik doe wat fout, maar ik kan er niet achter komen wat? Samen met het feit dat het heel vreemd is dat ie de <jsp:setProperty name="berichtje" property="bericht" value="${param.tfd_Bericht}" /> niet doet...

Zou iemand me kunnen helpen hiermee, wat ik dan wel verkeerd doe?

Folding@home


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Mijn eerste gedachte is de versie van de JSP container. Welke versie van je applicatie server gebruik je?

Het lijkt er namelijk op dat hij de ${...} syntax nog niet accepteert.

edit:
En check gelijk de code conventies van Java even, want je houdt je daar niet echt aan: http://java.sun.com/docs/codeconv/

[ Voor 28% gewijzigd door bigbeng op 01-10-2004 16:00 ]


  • Tootoo
  • Registratie: Augustus 2003
  • Laatst online: 29-08-2025

Tootoo

Folding extremist

Topicstarter
bigbeng schreef op 01 oktober 2004 @ 15:52:
Mijn eerste gedachte is de versie van de JSP container. Welke versie van je applicatie server gebruik je?

Het lijkt er namelijk op dat hij de ${...} syntax nog niet accepteert.

edit:
En check gelijk de code conventies van Java even, want je houdt je daar niet echt aan: http://java.sun.com/docs/codeconv/
Waar kan ik zien welke versie dat is?

En die conventies ga ik nu naar kijken.

Folding@home


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Nou, als je Tomcat gebruikt, dan kun je dat gewoon checken in de documentatie (docs dir). Daar staat geloof ik ook beschreven welke jsp container versie wordt gebruikt. Als dit 1.0 is, dan wordt ${...} nog niet ondersteund geloof ik.

  • Tootoo
  • Registratie: Augustus 2003
  • Laatst online: 29-08-2025

Tootoo

Folding extremist

Topicstarter
Naar mijn weten gebruik ik versie 2.0. Heb Tomcat ook pas een week geleden geinstalleerd :)

Folding@home


  • Tootoo
  • Registratie: Augustus 2003
  • Laatst online: 29-08-2025

Tootoo

Folding extremist

Topicstarter
Goed, ik ben echt lang door wezen klooien nu.... de volgende manier werkt dus

ik gebruik

code:
1
2
3
4
5
6
7
         <c:set target="${berichtje}" property="bericht" value="${ param.tfd_Bericht}" />
         
         <c:if test="${ berichtje.berichtValid == false }">
          <jsp:forward page="error.jsp">
            <jsp:param name="error" value="geenBericht" />
          </jsp:forward>
        </c:if>


Voor het opgeven wat de waarde moet zijn en het bekijken of er een fout is opgetreden.

De validatie functie heb ik veranderd nu, in:
code:
1
2
3
4
5
6
    public boolean isBerichtValid() {                
        if (this.bericht.equals("")) {
            return false;
        }
        return true;
    }

Folding@home


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Je weet wel wat het verschil tussen string == "" en string.equals("") is?
Iig was dat hetgene waar ik je op wilde wijzen, een klassieke fout in Java bij String-vergelijkingen.

Btw, let er op dat this.bericht nog steeds null mag zijn en als dat het geval is je een nullpointerexception kan krijgen. Dus de if aanpassen naar zoiets werkt dan nog iets beter:

if(bericht == null || bericht.equals(""))

Jammer voor je dat ik je topic niet eerder zag, had je aardig wat werk kunnen besparen

  • Tootoo
  • Registratie: Augustus 2003
  • Laatst online: 29-08-2025

Tootoo

Folding extremist

Topicstarter
ACM schreef op 01 oktober 2004 @ 18:55:
Je weet wel wat het verschil tussen string == "" en string.equals("") is?
Iig was dat hetgene waar ik je op wilde wijzen, een klassieke fout in Java bij String-vergelijkingen.

Btw, let er op dat this.bericht nog steeds null mag zijn en als dat het geval is je een nullpointerexception kan krijgen. Dus de if aanpassen naar zoiets werkt dan nog iets beter:

if(bericht == null || bericht.equals(""))

Jammer voor je dat ik je topic niet eerder zag, had je aardig wat werk kunnen besparen
Ik weet het inderdaad ja... maar het was alweer een tijdje dat ik met java gewerkt heb :) Ik zal de aanpassing nog maken. En je zag hem, beter laat dan nooit dus.

Thanks :)

Folding@home


  • flowerp
  • Registratie: September 2003
  • Laatst online: 06-08 18:29
Ter extra info voor deze situatie: <jsp:setproperty> zet GEEN lege string of null waarden. Een klassie instinker.

Aan de ene kant is dit handig voor pagina's waar niet altijd alle parameters meegegeven worden. Als de paramater er niet is wil vaak dat je bean de oude waarde blijft behouden. Aan de andere kant kun je dus niet via <jsp:setproperty> zien of aan parameter helemaal niet meegegeven is of leeg was. Vooral de laatste is naar, omdat bv een user expliciet een textbox kan leegmaken.

It's shocking to find how many people do not believe they can learn, and how many more believe learning to be difficult.


  • momania
  • Registratie: Mei 2000
  • Laatst online: 17-08 20:19

momania

iPhone 30! Bam!

ACM schreef op 01 oktober 2004 @ 18:55:

if(bericht == null || bericht.equals(""))
Je kan het ook zo doen:

if("".equals(bericht))

bespaart je weer een controle op null :)

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


Verwijderd

momania schreef op 02 oktober 2004 @ 14:20:
[...]

Je kan het ook zo doen:

if("".equals(bericht))

bespaart je weer een controle op null :)
code:
1
2
3
4
String blaat = null;
if("".equals(blaat))
  log.info("missen we hier niet iets??");
}



volgens mij gaat die log dan dus niet gebeuren... (maar het principe van de constante te gebruiken voor de equals is iets waar je volgens mij aan MOET wennen, het helpt in heel wat gevallen....)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
public boolean isBerichtValid() {
        
                
        if (this.bericht != null && this.bericht != "") {
            return true;
        }
        
        return false;
    }

==>

return this.bericht != nul && !this.bericht.equals("");//=>true or false...waarom nog evalueren?

[ Voor 28% gewijzigd door Verwijderd op 02-10-2004 15:25 ]

Pagina: 1