# Booleancase bei JSP



## kossy (13. Dez 2012)

Hallo,

Ich habe mal eine Frage zu JSP. Wie kann ich hier nur einen bestimmten Teil meiner JSP Seite anzeigen (gesteuert über eine Booleanvariable), wenn die Booleanvariable "loginError" aus einem ServletRequest innerhalb einer anderen Klasse entsprechend gesetzt werden muss. Hier der bisherige Code:

- JSP Seite:

```
<%if (request.getParameter(loginError)) { %>
			
	<tr>
		<td>Fehler bei Anmeldung</td>
	</tr>
<% } %>
```

- Teil der betroffenen Javaklasse:


```
if (hRequest.getParameter(FORM_AUTH_USER) != null) {
                if (hRequest.getParameter(FORM_AUTH_PASS) != null) {

                    if (!authenticate(session, hRequest.getParameter(FORM_AUTH_USER),
                            hRequest.getParameter(FORM_AUTH_PASS))) {

                        // Hier muss die Steuervariable loginError gesetzt werden
                        this.loginError = true; 

                        // Weiterleitung auf die Loginseite
                        hRequest.getRequestDispatcher(LOGIN_PAGE).forward(request, response);

                        return;
                    } else {

                        // Kontrolausgabe
                        log.info("Successfull login: " + hRequest.getParameter(FORM_AUTH_USER));
                    }

                }
            }
```

Bisher wird nur immer wieder ein- und dieselbe Startseite beim Anmeldeversuch angezeigt (auch wenn der Login fehl schlägt) Ich möchte das jetzt mit einer entsprechenden fehlermeldung ergänzen.


Danke für die Hilfe!

Grüße
Kossy


----------



## SlaterB (13. Dez 2012)

Parameter sind durch die URL gegeben,
du kannst aber in Request oder Session Attribute ablegen und auslesen


----------



## kossy (13. Dez 2012)

Hallo !

Leider klappt das mit de Session nicht. In der Java Klasse kann ich mit der Methode SetAttribute nur Strings setzen, aber keine Booleanwerte

```
session.setAttribute(FORM_AUTH_USER_ERROR, "true");
```


```
<%if (request.getParameter("auth_user_error").equals("true")) { %>			
	<tr>
		<td><b>Fehler bei der Anmeldung</b></td>
	</tr>
<% } %>
```

Leider kann ich in meine JSP Directive auf keine Booleanwerte einbauen.

Gruß


----------



## SlaterB (13. Dez 2012)

es gibt ja immer noch den Request bei zwei Alternativen, die ich genannt hatte..
da kann man beliebige Attribute speichern (edit: in der Session auch.., Key String, Value Object),

aber String geht doch auch, "true" dann, darauf prüfen


----------



## kossy (13. Dez 2012)

Hi Slater,

ich hab nochmal eine Frage. Ich habe jetzt ein Attribut in dem Request, aber anscheinend greife ich in meiner JSP Seite noch nicht richtig darauf zu.


```
<%if (request.getParameter("auth_user_error").equals("true")) { %>	
	<b>Fehler bei der Anmeldung</b>
<% } %>
```


oder


```
<%if (request.getAttribute("auth_user_error").equals("true")) { %>	
	<b>Fehler bei der Anmeldung</b>
<% } %>
```

bewirken leider gar nichts, sprich sie werden wohl nicht ausgeführt.

Gruß


----------



## SlaterB (13. Dez 2012)

'bewirkt nichts' kann immer unendlich Ursachen haben, alter Cache, Code gar nicht ausgeführt und beliebiges weiteres

ein if testen man spätestens im Zweifel dann so:


```
- Ausgabe vor dem If
- if ... Ausgabe Positiv  else Ausgabe Negativ
- Ausgabe nach dem If
```
außerdem ständig aktualisieren gegen alte Versionen

wenn Vor und Nach vorhanden sind + Ausgabe Negativ, dann man so langsam die Überzeugung gewinnen, dass das if fehltgeschlagen ist,

du postest keinen Code zum Einfügen eines Attributs in den Request, da kann natürlich ne Menge schiefgehen,
wiederum auch Code nicht ausgeführt usw.,
das gehört genauso mit exakten Logs umrandet,

denkbar wäre noch, mit getAttributeNames() nachzuschauen welche Keys da sind,
mit hashCode() oder sonstiger Id nachprüfen ob es genau das HttpServletRequest-Objekt ist, in welchem zuvor etwas eingefügt wurde usw.,
tausende Dinge sind zu tun..


----------



## kossy (14. Dez 2012)

Hallo nochmal !

Also ich konnte das Problem jetzt lösen. Dazu habe ich jetzt folgendes in meiner Javaklasse angepasst:

```
public void doMethode(final ServletRequest request, final ServletResponse response,
            final FilterChain chain) throws IOException, ServletException {

   final HttpServletRequest httpRequest = (HttpServletRequest) request;
   final HttpSession session = httpRequest.getSession(true);

   httpRequest.getRequestDispatcher(index.jsp + "?err=1").forward(request, response);

}
```

Evtl. ist diese Lösung aber unschön und ich würde gerne die ParameterMap des Requestobjektes befüllen:


```
public void doMethode(final ServletRequest request, final ServletResponse response,
            final FilterChain chain) throws IOException, ServletException {

    final HttpServletRequest httpRequest = (HttpServletRequest) request;
    final HttpSession session = httpRequest.getSession(true);

    httpRequest.getParameterMap().put("err", true); // hier die Änderung

    httpRequest.getRequestDispatcher(index.jsp).forward(request, response); // heir den Parameter wieder entfernt

}
```

Nun will ich das in meiner JSP Seite abprüfen:

```
<% if (request.getParameterMap().containsKey("err")) { %>
```

Leider bekomme ich bei dem versuch das so zu lösen immer eine Exception, die einen NullPointer aufführt.

Wie könnte ich das noch anders lösen? Auch über die Lösung mit Sessionattribute oder Requestattributen führt zu einer NullPointerException. Es wird auch erwähnt, dass eine UnmodifiableMap vorhanden ist. Diese Exception könnte ich auch bei Bedarf komplett posten.

Danke für die Hilfe!

Grüße
Kossy


----------

