# JSP Fehler beim casten , why?



## Spin (14. Jan 2010)

Hi, kann mir jemand sagen, welche Fehler ich in meinen Code habe , die zu dem problem führen , dass meine webseite bzw. mein programm nicht funktioniert.?


```
Integer number = (Integer) session.getAttribute("number");
            Integer counter = (Integer) session.getAttribute("counter");
```

Das casen will nicht :/



> org.apache.jasper.JasperException: An exception occurred processing JSP page /jsp/Zahlenbeispiel.jsp at line 29
> 
> 26:
> 27: // Auslesen von Session-Attributen, ggf, 'null', wenn diese
> ...




Weiß einer warum , danke


----------



## Antoras (14. Jan 2010)

Sicher, dass 
	
	
	
	





```
number
```
 und 
	
	
	
	





```
counter
```
ungleich null sind auch auch Integer-Objekte enthalten?

Und greifst du auch auf den richtigen Scope zu? Wenn du dein Objekt dem ServletContext hinzufügst, dann soltest du anstatt 
	
	
	
	





```
session.getAttribute(...)
```
 eher 
	
	
	
	





```
application.getAttribute(...)
```
 nutzen.


----------



## Spin (14. Jan 2010)

ich fang das gerade an zu lernen.
Daher wollte ich lediglich beispiele durchgehen und auch konkret session verwenden.!


```
<%!

/* Wir müssen mit Integer-Objekte arbeiten, da Sessions keine primitive Datentypen
 * akzeptieren.
 * Weiterhin gleicht sie einer HshMap. (eindeutige Namen)
 * Session ID's werden über Cookies realisiert.
 *
 **/

    /* Erzeugt eine Zufallszahl twischen 0..100*/
    private Integer guessNewNumber() {
        int result = new Double(Math.random() * 100).intValue();
        return new Integer(result);
    }
    /* Erhöht den Zähler*/
    private Integer inc(Integer counter) {
        int result = counter.intValue() + 1;
        return new Integer(result);
    }
%>
<%
            Integer guess = null;

// Auslesen von Session-Attributen, ggf, 'null', wenn diese
// nicht existieren
            Integer number = (Integer)session.getAttribute("number");
            Integer counter = (Integer)session.getAttribute("counter");
            

// Auslesen des Request Parameters 'guess', der die letzte
// Eingabe des Benutzers - so vorhanden - enthält
            String param = request.getParameter("guess");
            if (param != null) {
                guess = new Integer(param);
            }
%>



<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body style="color:green">
        <%-- Codieren eines URL's --%>
        <form action='<%= response.encodeURL("numberGuess.jsp")%>'>

            Ich denke mir eine Zahl zwischen 0 und 100. Welche?
            <% // ist dies ein neues Spiel oder läuft es bereits?!
                if (number == null) {
                    number = guessNewNumber();
                    counter = new Integer(0);

                    // initialisieren der Sessionattribute
                    session.setAttribute("number", number);
                    session.setAttribute("counter", counter);
                } else {
                    counter = inc(counter);
                    session.setAttribute("counter", counter);
                int result = number.compareTo(guess);

                    switch (result) {
                        case -1:    %> Die gesuchte Zahl ist kleiner. <%
                           // Löchen der Session-Attributes
                       session.removeAttribute("number");
                           break;
                       case 1:      %> Die gesuchte Zahl ist größer. <%
                            break;
                    }
                }
            %>

            Eingabe: <input type="text" name="guess" />
                     <input type="submit" value="Versuchen" />
```


Hier mal das ganze Beispiel. Ich weiß nicht warum es mir einen Fehler ausgibt :/
Am anfang sind die sachen null.


----------



## Antoras (14. Jan 2010)

Dein HTML-Code ist fehlerhaft. Du hast vergessen das form-Tag zu schließen.

Füge in die letzte Zeile noch ein </form> ein und dann sollte dein JSP laufen.


----------



## Spin (16. Jan 2010)

Ne , dass ist nicht der Fehler.

Der will dass einfach nicht Caste und ich brauche inder Session dringend ein Object. Nungut wenn es nicht will , dann halt nicht. Vielleicht finde ich per zufall irgendwann das problem.

Ich meine JSP's sind eigentlich einfach zu programmiueren , machen aber nur ärger -.-


----------



## ChrisM (16. Jan 2010)

Hallo, 
versuchs mal mit:

```
Integer value = Integer.valueOf("1");

Integer number = Integer.valueOf(session.getAttribute("number"));
Integer counter = Integer.valueOf(session.getAttribute("counter"));
```

Gruß Chris


----------



## Antoras (16. Jan 2010)

Also, bei mir funktioniert dein Code so wie er soll...



ChrisM hat gesagt.:


> ```
> Integer number = Integer.valueOf(session.getAttribute("number"));
> Integer counter = Integer.valueOf(session.getAttribute("counter"));
> ```


valueOf() nimmt nur String-Objekte. Also noch ein toString() aufrufen...

Im übrigen würde ich sowieso empfehlen keine Scriptlets (Java-Code in den JSP) zu benutzen. Das ist unschön, nicht wartbar und viel zu fehleranfällig. Mach das lieber über Servlets und nutze die JSP nur für dein View.

EDIT: Der Fehler tritt auf wenn guess null ist, deine beiden Integerwerte number und counter aber schon einen Wert zugewiesen bekommen haben. Kann beispielsweise passieren wenn du die Seite ohne GET-Parameter refreshst  Schreib hinter das else-Statement noch ein 
	
	
	
	





```
if(guess != null)
```
 hin, dann umgehst du den Fehler. Wobei das wie gesagt alles andere als schön programmiert ist.


----------

