Avatar billede steinigumm Nybegynder
27. marts 2003 - 12:55 Der er 19 kommentarer og
1 løsning

Validering af input

Jeg har et skærmbillede hvor der skal indtastes personlige oplsyninger, og disse skal gemmes i en database. Problemet er at inden jeg trykker submit, så vil jeg gerne have valideret mine data.

Inden jeg trykker opretMedlem, som er metoden som jeg skal kalde. Skal jeg kalde en anden metode der ligger i et javaprogram som jeg har lavet. Hvordan skal jeg gøre dette.
Der kan man bare se, et problem blev til to. Håber nogle kan hjælpe.
Avatar billede disky Nybegynder
27. marts 2003 - 13:10 #1
Hvis din verificerende klasse hedder 'Verificer'

Så gør du:

Verificer verificer=new Verificer();
if(verificer.checkData(felt1,felt2,felt3,felt4,felt5)
{
//Gik godt
}
else
{
//gik ikke godt.
}
Din checkData metode og kaldet af den skal selvfølgelig tilpasset det antal parametere som der reelt er.

Så du har helt ret i du kalder en metode i dit andet program, der så checker dem for dig. Og evt. gemmer dem hvis data er okay.
Avatar billede steinigumm Nybegynder
27. marts 2003 - 13:13 #2
hvad gør metoden verificer. Tjekker den om der er data i, eller hvordan er det med det
Avatar billede disky Nybegynder
27. marts 2003 - 13:19 #3
sorry misforstod dit spørgsmål lidt.

hvis du i din form har et felt, lad os kalde det 'Navn'

så laver du følgende i JSP side for at hente data fra det felt:

String navn=request.getParameter("Navn"); //henter felt værdien
if(navn==null || navn.trim().length()==0)
{
  navn="Intet navn indtastet";
}

Eksemplet henter værdien af feltet Navn fra din form, og checker foor om der er indtastet noget reelt idet, et tomt felt, eller bare mellemrum godkendes ikke.

Det samme gør du så ved alle felter i din form.

Du kan undersøge om et felt kun indeholder tal, om det er et gyldigt 4 cifret postnummer osv.

Det afhænger helt af hvad det er for information du skal havde folk til at indtaste.

Du kan med fordel lave generelle metoder til at hente værdierne med og gemme dem som statiske metoder i en klasse, og bruge dem i flere projekter.
Avatar billede europe Nybegynder
27. marts 2003 - 13:22 #4
Den anden mulighed ligger i at du med javascript kan validere data'en inden du submiter din form. Denne function kan så kalde en alert box der beskriver hva der mangler eller hva der er forkert udfyldt...
Avatar billede disky Nybegynder
27. marts 2003 - 13:22 #5
Jeg bruger f.eks. denne klasse til at hente værdier fra forms med, den har metoder til handling af String, boolean, int, long osv.

import javax.servlet.http.*;

/**
*
* @author  srr
* @version
*/
public class ParameterParser
{
    public static final String STRING_DEFAULT="TEST";
    public static final int INT_DEFAULT=-1;
    public static final long LONG_DEFAULT=-1;
    public static final float FLOAT_DEFAULT=-1;
    public static final double DOUBLE_DEFAULT=-1;
    public static final boolean BOOLEAN_DEFAULT=false;
   
    // Is private in order to make sure it can not be instantiated
    private ParameterParser()
    {
    }
   
    public static String getString(HttpServletRequest request, String name)
    {
        return getString(request, name,STRING_DEFAULT);
    }

    public static String getString(HttpServletRequest request, String name, String def)
    {
        String temp=request.getParameter(name);
        if(temp==null || temp.equals("")) return def;
       
        return temp;
    }
   
    public static int getInt(HttpServletRequest request, String name)
    {
        return getInt(request, name, INT_DEFAULT);
    }

    public static int getInt(HttpServletRequest request, String name, int def)
    {
        String temp=request.getParameter(name);
        if(temp==null || temp.equals("")) return def;
       
        int val=def;
       
        try
        {
            def=Integer.parseInt(temp);
        }
        catch (NumberFormatException e)
        {
        }
        return def;
    }

    public static long getLong(HttpServletRequest request, String name)
    {
        return getLong(request, name, LONG_DEFAULT);
    }

    public static long getLong(HttpServletRequest request, String name, long def)
    {
        String temp=request.getParameter(name);
        if(temp==null || temp.equals("")) return def;
       
        long val=def;
       
        try
        {
            def=Long.parseLong(temp);
        }
        catch (NumberFormatException e)
        {
        }
        return def;
    }

    public static float getFloat(HttpServletRequest request, String name)
    {
        return getFloat(request, name, FLOAT_DEFAULT);
    }

    public static float getFloat(HttpServletRequest request, String name, float def)
    {
        String temp=request.getParameter(name);
        if(temp==null || temp.equals("")) return def;
       
        float val=def;
       
        try
        {
            def=Float.parseFloat(temp);
        }
        catch (NumberFormatException e)
        {
        }
        return def;
    }

    public static double getDouble(HttpServletRequest request, String name)
    {
        return getDouble(request, name, DOUBLE_DEFAULT);
    }

    public static double getDouble(HttpServletRequest request, String name, double def)
    {
        String temp=request.getParameter(name);
        if(temp==null || temp.equals("")) return def;
       
        double val=def;
       
        try
        {
            def=Double.parseDouble(temp);
        }
        catch (NumberFormatException e)
        {
        }
        return def;
    }

    public static boolean getBoolean(HttpServletRequest request, String name)
    {
        return getBoolean(request, name, BOOLEAN_DEFAULT);
    }
   
    public static boolean getBoolean(HttpServletRequest request, String name, boolean def)
    {
        String temp=request.getParameter(name);
        if(temp==null || temp.equals("")) return def;
        if(temp.equalsIgnoreCase("on") || temp.equalsIgnoreCase("true")) return true;
        return false;
    }
   
}
Avatar billede steinigumm Nybegynder
27. marts 2003 - 13:23 #6
problemet ligger i at når jeg trykker submit, så skal der ikke åbnes et nyt vinue, men der skal komme en besked at det er gået galt ved et input, Når alt så er i skønneste orden, så skal jeg trykke submit, og metoden skal kaldes..
Avatar billede europe Nybegynder
27. marts 2003 - 13:24 #7
Så skal du bruge javascript...
Avatar billede disky Nybegynder
27. marts 2003 - 13:25 #8
Du poster formen til din server, JSP'en validerer så data via en klasse, er alt okay gemmes data f.eks. i en database, hvis det ikke er okay, sendes brugeren retur til samme side, hvor det så er markeret hvad der er galt.
Avatar billede steinigumm Nybegynder
27. marts 2003 - 13:25 #9
hvordan gøres det med javascript nemmes...
Avatar billede steinigumm Nybegynder
27. marts 2003 - 13:25 #10
har du et ekspempel europe
Avatar billede disky Nybegynder
27. marts 2003 - 13:27 #11
europe:
Nej man skal ej, man kan til mere simple ting bruge javascript, men man skal ikke.
Avatar billede disky Nybegynder
27. marts 2003 - 13:28 #12
et andet problem med javascript løsningen er at de er meget nemme at snyde, ved at man henter siden gemmer den lokalt retter i scriptet, og poster alligevel.

Jeg har fået indtil flere sites til at tilte på den måde.
Okay man kan beskytte sig med server side check igen, men så er der ingen grund til javascriptet, da det er dobbelt konfekt.
Avatar billede disky Nybegynder
27. marts 2003 - 13:29 #13
steinigumm:
Så skal du spørge i javascript gruppen, herinde snakker vi om JSP.
Avatar billede europe Nybegynder
27. marts 2003 - 13:31 #14
Her er et jeg har brugt... Selv om dette ikke er det rigtige forum for det men nu er vi så langt...

function checkAndSubmit()
{
  if (document.labeledit.CountriesId.value == "")
  {
    alert("Country must be entered.");
    return;
  }
  if (document.labeledit.CompaniesId.value == "")
  {
    alert("Must choose a cusomer.");
    return false;
  }
  if (document.labeledit.Pieces.value == "")
  {
    alert("Boxes must be entered.");
    return false;
  }
  if (document.labeledit.TransportTerm.value == "")
  {
    alert("Transport term must be entered.");
    return false;
  }
  if (document.labeledit.DeliveryNoteNumber.value == "")
  {
    alert("Delivery note must be entered.");
    return false;
  }
  if(document.labeledit.CustName.value == "" || document.labeledit.CustAddr1.value == "" || document.labeledit.CustCity.value == "")
  {
      alert("Customer information\n\n  Customer Name\n  Address 1\n        City\n\nMust be entered");
    return false;
  }

  return true;
}

labeledit = formen's navn
CustAddr1 = input feltet's navn

på formen laves så
<form name="labeledit" action="page.jsp" onsubmit="return checkAndSubmit()">
Avatar billede steinigumm Nybegynder
27. marts 2003 - 13:34 #15
ja, men jeg har et andet problem, som ligner dette meget.
Når jeg submitter er det første der sker at man går ned i databasen for at se om adressen allerede er oprettet(lidt svært at forklare hvorfor, men det gør den, og den skal gøre det) hvis den ikke er oprettet skal den returnere -1 ellers det id som der bliver fundet.

Hvis id er fundet er der ingen problemer. Så kaldes den næste metode bare og der gemmes. Problemet er, og altså spørgsmålet. hvordan returnere jeg til siden for at taste data ind igen(altså der hvor det er forkert). Det er nok det samme som du var inde på disky, men forstod ikke rigtigt din kode...
Avatar billede europe Nybegynder
27. marts 2003 - 13:35 #16
Funktionen skal selvfølgelig ligge inden i
<script>

</script>

Da det er et javascript...
Avatar billede disky Nybegynder
27. marts 2003 - 14:10 #17
steinigumm:
Netop derfor er javascript helt ubrugelig til denne opgave, som jeg har nævnt tidligere skal der en server side løsning til.

Min kode bruges til at hente værdierne fra felterne i formen, og f.eks. konverterer dem til en int, boolean osv.
Når du har felterne i brugbare formatter laver du et database opslag og undersøger det med adresserne osv. F.eks. ved brug af den databasehandler klasse jeg har postet temmeligt mange gange her på sitet.
Avatar billede jacobve Nybegynder
27. marts 2003 - 20:39 #18
en helt anden ting. er der nogen af jer der har kigget struts? det er et framework der blandt andet også understøtter det at hente og validere data fra forms.

jakarta.apache.org/struts

Det er helt suplimt.
Avatar billede disky Nybegynder
27. marts 2003 - 20:45 #19
struts er en okay ting, men der er en masse installering og opsætning.

Mit indtryk er det er totalt overkill på nuværende niveau at begynde at bøvle med 3. parts produkter.

Det er altid bedst at lære det først, og derefter se på andre teknologier.
Avatar billede jacobve Nybegynder
27. marts 2003 - 22:57 #20
det har du helt sikkert ret i.

Det kræver at du heletiden sørger for at få mappet de rigtige forms og actions i din struts-config.xml


Ville også bare gøre opmærksom på et fornuftigt (gratis) framework der kan benyttes til formålet.
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