[JSP] file2 in iframe in file1 geeft eerste keer een fout.

Pagina: 1
Acties:

  • vegterb
  • Registratie: Juni 2001
  • Laatst online: 16-04 10:23

vegterb

[ZzZ]Vighter

Topicstarter
Ik heb ook al eerder een topic gehad hier en heb met veel moeite mezelf wat JSP aan weten te leren. De reden hiervan is, dat er voor mij geen tijd was om JSP te leren en meteen moest beginnen met programmeren. Helaas, dit kon niet anders :/

Het topic wat ik al had: [Java] Database connection zit dicht, omdat mijn laatste vraag een beetje dom was O-). Maar daar kwam ik zelf ook vrij snel achter na de post.

Nu zit ik alleen weer vast en ik zie het echt niet meer. Na enkele uren zoeken op google, GoT en gewoonweg proberen en de code rustig doorlopen en de logica van de foutmelding in te zien kom ik er toch niet uit.

De situatie:
Ik heb een pagina: 'add_diet2.jsp' waarin een 2e pagina geladen wordt in een iframe: 'add_diet3.jsp'. Nu komt er in add_diet3.jsp informatie te staan die uit add_diet2.jsp moet komen. Natuurlijk, de eerste keer dat de pagina's geladen worden zijn er nog veriabelen voor add_diet3.jsp, gevolg: foutmelding. Maar ik krijg het niet voor elkaar om deze foutmelding op te vangen. Het probleem ligt hem waarschijnlijk in request.getParameter(""); Deze hebben de 1e keer geen waarde en zijn dus: null. Maar als ik een if (bla.equals(null)) { out.println("fout!"); } doe, dan werkt dat tot zo ver dat gewoonweg mijn foutmelding veranderd naar:
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
HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:370)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

root cause

java.lang.NullPointerException
    org.apache.jsp.add_005fdiet3_jsp._jspService(org.apache.jsp.add_005fdiet3_jsp:65)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5.12 logs.
Apache Tomcat/5.5.12

Ik heb de logs ook al doorgelezen, dit is een document van enkele pagina's lang. Aan het begin van de log staat duidelijk een probleem bij het omzetten van een String naar een int en valueOf (in deze omzetting). Dus kortom, er is geen waarde (of een waarde null) die omgezet kan worden.

Ik kijk misschien verkeerd, maar zie het niet meer. Ik hoop dat iemand mij ff een tip wil geven! De code die hieronder staat is niet echt netjes meer en de pagina wordt er niet netter op, maar werkt wel (als er iets in de variabelen staat). Ik ben er dus mee wezen proberen, dus het staat nog niet allemaal even netjes. De code staat dus ook nog beetje vol met probeersels, maar die zouden niet de oorzaak mogen zijn van het niet functioneren van het bestand. Probeersels, zoals: if ((food.equals(null)) || (quantity.equals(null)) || (unit.equals(null)) || (dietid.equals(null)))

add_diet3.jsp
Java:
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
<HTML>
<%@ page import="java.sql.*" %>
<%@ taglib uri="taglib.tld" prefix="page" %>
<title>Food List</title>
<link rel="stylesheet" href="2col_leftNav.css" type="text/css">

</head>
<body>
<h2 id="Foodlist">Food List</h2>
<table>
<%

String food = request.getParameter("food");
String quantity = request.getParameter("quantity");
String unit = request.getParameter("unit");
String dietid = request.getParameter("dietid");

if ((food.equals(null)) || (quantity.equals(null)) || (unit.equals(null)) || (dietid.equals(null)))
{
    out.println("No food added to diet");
}
else
{
String quantitycount = null;
String food_name_english = null;
String foodid = null;
double d = 0;
double countc = 0;
int dietid_int = 0;
PreparedStatement ps = null;
String String_ActionStatus;
String foodlist = null;
boolean ActionStatus = false;
Connection con = null;
Statement statement = null;
ResultSet rs = null;

if (dietid.equals(null))
{
    out.println("Error: No diet number");
}
else
{
dietid_int = Integer.valueOf (dietid).intValue();
}
if (quantity.equals(null))
{
    out.println("Error: No quantity found");
}
else
{
d = Double.valueOf(quantity);

out.println(unit);
if (unit.equals("kg"))
    {
        countc = ( d * 1000000 );
    }
if (unit.equals("g"))
    {
        countc = ( d * 1000 );
    }
if (unit.equals("mg"))
    {
        countc = d;
    }
}

try
 {
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/*****","root","******");

    String query = "INSERT INTO diet_food (id_diet, id_food_data, quantity) VALUES ('" + dietid_int + "','" + food + "','" + countc + "')";

                    ps = con.prepareStatement(query);
                    statement = con.createStatement();
                    ps.executeUpdate();
                    ActionStatus = !ActionStatus;

                    if ( ActionStatus == true )
                    {
                        String_ActionStatus = "";
                    }
                    else
                    {
                        String_ActionStatus = "Het invoegen van de informatie is niet gelukt";
                    }
                    out.println(String_ActionStatus);

    } catch(Exception e) {
      out.println("Exception: " + e.getMessage());
    } finally {
      try {
        if(con != null)
          con.close();
      } catch(SQLException e) {}
    }

out.println("<br><tr valign='top'><td><b>Name</b></td><td><b>Quantity</b></td></tr>");

try {
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/******","root","******");

     String query = "SELECT diet_food.quantity, food_data.food_name_english, diet_food.id_diet_food FROM diet_food, food_data WHERE diet_food.id_diet = '" + dietid_int + "' AND diet_food.id_food_data = food_data.id_food_data";
     statement = con.createStatement();
     rs = statement.executeQuery(query);

    while (rs.next())
    {
        quantitycount = rs.getString(1);
        food_name_english = rs.getString(2);
        foodid = rs.getString(3);

        double b = Double.valueOf(quantitycount);
        double counta;
        double countb;

        if ((b >= 1000) && (b <= 999999))
            {
                counta = (b / 1000);
                out.println( "<tr valign='top'><td>" + food_name_english + "</td><td>" + counta + " gr</td>");
            }

        if (b >= 1000000)
            {
                countb = (b / 1000000);
                out.println( "<tr valign='top'><td>" + food_name_english + "</td><td>" + countb + " Kg</td>");
            }
        if (b <= 999)
            {
                out.println( "<tr valign='top'><td>" + food_name_english + "</td><td>" + b + " mg</td>");
            }
        out.println(foodid);
    %>
<td valign='middle'>
    <form style='margin: 0px;' method = 'post' action = 'delete_diet_food.jsp'>
            <input type='hidden' name='foodid' value="<%= foodid %>">
            <input type='submit' class='button' value='Delete Food' onclick="return confirm('Are you sure?');">
            <input type="hidden" name="dietid" value="<%= dietid %>">
    </form>
</td>
</tr>
    <%
    }

    } catch(Exception e) {
      out.println("Exception: " + e.getMessage());
    } finally {
      try {
        if(con != null)
          con.close();
      } catch(SQLException e) {}
    }
}
%>
</table>
</body>
</html>

[ Voor 30% gewijzigd door vegterb op 05-01-2006 15:40 ]

My Laptop Specificaties vs My Desktop Specificaties


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Je checkt niet of je request goed gevuld is. Je rost dingen direct uit je request in een variabele, waarna je ervan uitgaat dat hij niet null is. (regel 13-16)
Als een van de 4 request variabelen wel null is, dan gaat regel 18 over de zeik.

Oh, ik zie dat je dat wel probeert. Maar je moet gewoon food == null doen, niet food.equals(null).

[ Voor 18% gewijzigd door bigbeng op 05-01-2006 15:42 ]


  • vegterb
  • Registratie: Juni 2001
  • Laatst online: 16-04 10:23

vegterb

[ZzZ]Vighter

Topicstarter
bigbeng schreef op donderdag 05 januari 2006 @ 15:41:
Je checkt niet of je request goed gevuld is. Je rost dingen direct uit je request in een variabele, waarna je ervan uitgaat dat hij niet null is. (regel 13-16)
Als een van de 4 request variabelen wel null is, dan gaat regel 18 over de zeik.
Ja, dat heb ik geprobeerd. Je bedoeld:
Java:
1
2
3
4
5
6
7
8
if ((request.getParameter("food").equals(null)) || (request.getParameter("quantity").equals(null)) || (request.getParameter("unit").equals(null)) || (request.getParameter("dietid").equals(null)))
{
out.println("Fout: een van de gegevens is null");
}
else
{
// voor bestand verder uit
}

[ Voor 6% gewijzigd door vegterb op 05-01-2006 15:45 ]

My Laptop Specificaties vs My Desktop Specificaties


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
zie mijn edit :)

  • vegterb
  • Registratie: Juni 2001
  • Laatst online: 16-04 10:23

vegterb

[ZzZ]Vighter

Topicstarter
Oké, da's duidelijk! Daar had ik dus duidelijk niet aan gedacht! Bedankt!

En sorry dat de vraag/oplossing eigenlijk zo makkelijk was :X

[ Voor 4% gewijzigd door vegterb op 05-01-2006 15:48 ]

My Laptop Specificaties vs My Desktop Specificaties


  • vegterb
  • Registratie: Juni 2001
  • Laatst online: 16-04 10:23

vegterb

[ZzZ]Vighter

Topicstarter
Nu heb ik bijna hetzelfde probleem nog een keer. Ik wil weer iets checken, maar om de een of andere reden wordt dit niet gedaan. De code:
Java:
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
%>
<script type="text/javascript">
function DataCheck()
{
    var food = parseInt(document.testform.food.value);
    var quantity = parseInt(document.testform.quantity.value);
    var unit = parseInt(document.testform.unit.value);
    var returnval;

    if (food == "-- Food --")
        out.println("No food selected");
        returnval = false;

    if ((quantity == "") || (quantity == null))
        out.println("No quantity");
        returnval = false;

    if (unit == "-- Unit --")
        out.println("No unit selected");
        returnval = false;

    else
    {
        returnval = true;
    }
    return returnval;
}
</script>

<form action="add_diet3.jsp" style='margin: 0px;' method="post" target="subframe" onSubmit="return DataCheck();">
              <table width="60%" border="0" cellspacing="0" cellpadding="0">
<%


Ik wil namelijk dat op het moment dat er gegevens verstuurd worden er eerst gekeken wordt of het wel goed is ingevuld, of misschien zelfs helemaal niet! Maar het is net alsof dat onSubmit niks doet! Ik heb het ook al bij het <input> zelf gezet, maar dat werkt ook niet! Ik heb verschillende websites doorgenomen en daarin wordt dat toch ook echt zo gedaan.

Ook het <script type=".. maakt niet uit als je dat niet neerzet als <script> of <script language="javascript">. Kan iemand mij opheldering geven of 'weer' een duw in de goede richting, want om de een of andere reden loopt het nu vast. Het grootste deel programmeren lukte perfect en dan dit soort kleine dingetjes, het opvangen van fouten |:(

Ik heb ook al gebruik gemaakt van onBlur e.d. maar dat wordt genegeerd om de een of andere reden. Ik wil wel gebruik maken van een return, zodat er true of false uit kan komen en het form niet gesubmit wordt.

edit:

Ik heb (this) ff weggehaald bij onSubmit="return DataCheck(); dit had ik even geprobeerd, maar dat haalde natuurlijk niks uit

[ Voor 12% gewijzigd door vegterb op 07-01-2006 15:27 . Reden: Kleine aanpassing code ]

My Laptop Specificaties vs My Desktop Specificaties


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
net als bij java moet je bij javascript een if block van meer dan 1 statement voorzien van een open en sluit accolade, { en } dus. Je javascript genereert nu een fout (compilatie fout als het goed is) en dan gaat de submit gewoon verder. Als je in je javascript console kijkt dan zul je ongetwijfeld fouten als "else without if" en dergelijke krijgen.

edit:

javascript != java, dus ook de out.println zal het niet doen... gebruik daar alert(<melding); voor.

[ Voor 17% gewijzigd door bigbeng op 07-01-2006 16:31 ]


  • vegterb
  • Registratie: Juni 2001
  • Laatst online: 16-04 10:23

vegterb

[ZzZ]Vighter

Topicstarter
bigbeng schreef op Saturday 07 January 2006 @ 16:29:
net als bij java moet je bij javascript een if block van meer dan 1 statement voorzien van een open en sluit accolade, { en } dus. Je javascript genereert nu een fout (compilatie fout als het goed is) en dan gaat de submit gewoon verder. Als je in je javascript console kijkt dan zul je ongetwijfeld fouten als "else without if" en dergelijke krijgen.

edit:

javascript != java, dus ook de out.println zal het niet doen... gebruik daar alert(<melding); voor.
De accolades had ik in de eerste instantie ook gebruikt, dus als 'try-out'. Helaas bracht dat ook geen uitkomst. Dus helaas, het wil nog niet werken...

Ik ga nu ff me javascript log doorlopen: foutmelding: error: document.testform has no properties. Ben nog niet zo'n ster in het gebruik van javascript, dus ga me maar ff verder verdiepen! Laat het wel weten als ik wat heb gevonden..

Suggesties altijd welkom O-)

[ Voor 20% gewijzigd door vegterb op 07-01-2006 20:48 ]

My Laptop Specificaties vs My Desktop Specificaties


  • flowerp
  • Registratie: September 2003
  • Laatst online: 04-02 02:01
@ts:

Als ik zo naar je listing van add_diet3.jsp kijk dan kan dat -echt- niet hoor. Een JSP is alleen maar een view, die kun je niet met goed fatsoen (zo) vol gaan zetten met Java code. Java code kun je veel beter in classes zetten.

Nu kun je mischien wel zeggen van ja, ik ben een beginner dus ik mag dat nog doen, maar je kunt veel beter gewoon meteen goed beginnen. Slechte gewoontes leer je later moeilijk af. In de makkelijkste vorm is het zelfs niet eens zo veel meer moeite!

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


Verwijderd

tip @ ts:

Het is handiger als je beans gebruikt, je kan dan ook makkelijker als je de debugger gebruikt kijken waar het probleem zit.

  • flowerp
  • Registratie: September 2003
  • Laatst online: 04-02 02:01
Verwijderd schreef op zondag 08 januari 2006 @ 04:06:
tip @ ts:

Het is handiger als je beans gebruikt, je kan dan ook makkelijker als je de debugger gebruikt kijken waar het probleem zit.
Dat ten eerste ja, daarnaast kun je je code hergebruiken. Nu moet je je code copy-pasten tussen pagina's. Als je het in beans (classes) stopt, kunnen verschillende pagina's dezelfde code aanroepen.

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


  • vegterb
  • Registratie: Juni 2001
  • Laatst online: 16-04 10:23

vegterb

[ZzZ]Vighter

Topicstarter
flowerp schreef op zaterdag 07 januari 2006 @ 22:10:
@ts:

Als ik zo naar je listing van add_diet3.jsp kijk dan kan dat -echt- niet hoor. Een JSP is alleen maar een view, die kun je niet met goed fatsoen (zo) vol gaan zetten met Java code. Java code kun je veel beter in classes zetten.

Nu kun je mischien wel zeggen van ja, ik ben een beginner dus ik mag dat nog doen, maar je kunt veel beter gewoon meteen goed beginnen. Slechte gewoontes leer je later moeilijk af. In de makkelijkste vorm is het zelfs niet eens zo veel meer moeite!
8)7

Beans e.d. is geen probleem hoor daar heb ik me al een tijd geleden in verdiept. Mijn code ziet er niet erg netjes uit, dat weet ik. Maar dit is gemaakt in de loop van mijn leerproces op JSP gebied en heb (helaas) geen tijd om dit nog allemaal mooier te maken. Het zou kunnen, maar omdat ik extreem weinig tijd heb ga ik dat niet redden. Mag blij zijn als het uberhaupt af komt. Maar ja, ik doe het voor school en een bedrijf en van school krijg ik wel een voldoende.. Dus mijn probleem zal het niet meer zijn na volgende week :Y)

Als beginner kun je alles doen, zelfs de meest moeilijke dingen. Als je je er maar even in verdiept. Het resultaat zal niet netjes zijn, maar het werkt wel :9~

My Laptop Specificaties vs My Desktop Specificaties


  • flowerp
  • Registratie: September 2003
  • Laatst online: 04-02 02:01
vegterb schreef op zondag 08 januari 2006 @ 16:05:
[...]
Als beginner kun je alles doen, zelfs de meest moeilijke dingen. Als je je er maar even in verdiept. Het resultaat zal niet netjes zijn, maar het werkt wel :9~
Dat snap ik, en dat is dan vaak ook het probleem. Zeker als het voor een bedrijf is, dan gaan die hier later echt problemen mee krijgen als ze het geheel willen uitbreiden.

Eigenlijk kun je het op deze manier op goed fatsoen alleen in een paar situaties doen:

1) Je bent beginner en wilt wat experimenteren met de techniek
2) Je wilt bliksemsnel een proto-type maken en moet wat mock-up schermen laten zien
3) Je weet -heel- zeker dat je applicatie beperkt gaat blijven tot 1 of hoogstens 3 a 4 JSP pagina's.

-alleen- in die situaties kun je eigenlijk zo te werk gaan als jij bent gegaan. In alle andere situaties is het echt een recept voor rampen. Ik werk zelf als programmeur bij een web development bedrijf. Ook wij hebben nog van dergelijke pagina's. Deze stammen uit een tijd dat er nog veel mensen in ons bedrijf moesten beginnen met Java. Na verloop van tijd kwamen er andere mensen werken of stagiares, en die keken de manier van werken dan weer af van de oude pages.

Op een gegeven moment bereikte onze applicatie een dergelijke grote dat het feit dat er Java in de JSP pagina's stond een enorm probleem ging vormen. refactorings waren niet meer, of amper mogelijk. Ze konden we niet makkelijk van DB wisselen omdat alle DB code op de pagina zelf stond. Ook de business logic stond per pagina.

Als voorbeeld, ergens stond een validate user blokje code. Omdat je niet een call kunt doen naar een block code op een JSP pagina, moest dat blokje code dus gecopiert worden als het ergens anders nodig was. Naar verloop van tijd waren er ongeveer 10 (!) plaatsen waar een user gevalideerd kon worden. Als er wat veranderde in het valideer process, dan moest dat dus op al die 10 plaatsen gedaan worden. Helaas gebeurde dat soms verschillend, en soms vergat iemand een plaats.

Op een gegeven moment kwamen er user aanmeldingen in ons systeem die niet klopte. Het is verplicht om een email op te geven bij ons, maar sommige aanmeldingen hadden die niet. We hebben ons toen rot gezocht hoe dat in hemelsnaam kon gebeuren. Omdat de code in de JSP pagina's stond, en op zoveel plekken, is dat zo ongelooflijk moeilijk in een grote web applicatie (+- 100.000 regels totaal), dat wil je niet weten ;)

Vandaar, als je serieus van plan bent om door te gaan met JSP, ASP, of PHP, leer dan zo snel mogelijk af om code in de pagina's ten zetten. Mits punt 3 van toepassing is op je projecten natuurlijk ;)

Iniedergeval suc6 er mee. Laat je nog weten wat je voor cijfer kreeg van je school? :)

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


Verwijderd

fout:

Java:
1
2
3
if (dietid.equals(null)){
  //code 
} 


moet zijn:

Java:
1
2
3
4
5
if (c instanceof String){
 
}else{
   //code       
}

[ Voor 6% gewijzigd door Verwijderd op 09-01-2006 13:19 ]

Pagina: 1