Problem z instrukcją IF w serwlecie

0

Witam serdecznie, mam taki kod:

 request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html; charset=UTF-8");
        PrintWriter out = response.getWriter();
        String nazwa_tabb = request.getParameter("nazwa_tab");
        String ajdii = request.getParameter("id");
        System.out.println(nazwa_tabb);
        if (!(nazwa_tabb == null) && !(nazwa_tabb.length() == 0)) {
            if (nazwa_tabb.equals("Pracownik")) {
                gotoPage("/Menu/Usuwanie_pracownika.jsp?numer=" + ajdii, request, response);
            } else if (nazwa_tabb.equals("Dzial")) {
                gotoPage("/Menu/Usuwanie_dzialu.jsp?numer=" + ajdii, request, response);
            } else if (nazwa_tabb.equals("Stanowisko")) {
                gotoPage("/Menu/Usuwanie_stanowiska.jsp?numer=" + ajdii, request, response);
            } else if (nazwa_tabb.equals("L_godzin")) {
                gotoPage("/Menu/Usuwanie_godzin.jsp?numer=" + ajdii, request, response);
            }
        } else {
            out.println("<script language=javascript type=text/javascript charset=ISO-8859-2>");
            out.println("alert(Nie zaznaczono rekordu do usunięcia!)");
            out.println("self.location.href=Menu.jsp");
            out.println("</script>");
        }

Problrem polega na tym, że na wejściu zmienna nazwa_tabb przyjmuje wartość null - dlatego też moje pytanie brzmi DLACZEGO pierwszy warunek IF (od góry) przyjmuje wartość TRUE a nie FALSE???próbowałem już wszystkiego...Może ktoś podsunie jakiś inny pomysł?

0

CZŁOWIEKU!!! Podajesz jakieś kody wyrwane ze środka i to można wywnioskować nie znając JSP. Zarzuć jakąś spójną całość to wtedy Ci pomożemy.

  • NOOP *
0

Jeżeli
if (!(nazwa_tabb == null) && !(nazwa_tabb.length() == 0))
powoduje wejście w warunek, to znaczy, że oba składniki warunku dają true. A tym samym obie zawartości nawiasów muszą dawać false. Czyli wynik porównania tabb z null nie jest udany podobnie jak wyniki wywołania metody nazwa_tabb.length() nie jest zerem.
Takie cuda zdarzają się często w językach skryptowych, ale nie omijają też kompilowanych. Moja hipoteza jest taka, że albo wcześniejszy println() wyświetla niezrozumiałe dla niego dane (np. nazwa_tabb.toString() czyli de facto wartość "this;" daje jakieś cuda na kiju interpretowane przez println jako null), albo kompilator wariuje po wykonaniu jakiejś szalonej optymalizacji (co jest bardziej prawdopodobne).
Ja bym ten warunek zmienił na:
if (nazwa_tabb != null && nazwa_tabb.length() > 0)
To daje znacznie prostszy i czytelniejszy kod, który powinien "lepiej" się kompilować czy też interpretować. Nie ma też wielkiego pola do podejrzanych optymalizacji.

0

Spróbuj tak:

        if (nazwa_tabb != null) {
          if(nazwa_tabb.length() > 0) {
            if (nazwa_tabb.equals("Pracownik")) {
                gotoPage("/Menu/Usuwanie_pracownika.jsp?numer=" + ajdii, request, response);
            } else if (nazwa_tabb.equals("Dzial")) {
                gotoPage("/Menu/Usuwanie_dzialu.jsp?numer=" + ajdii, request, response);
            } else if (nazwa_tabb.equals("Stanowisko")) {
                gotoPage("/Menu/Usuwanie_stanowiska.jsp?numer=" + ajdii, request, response);
            } else if (nazwa_tabb.equals("L_godzin")) {
                gotoPage("/Menu/Usuwanie_godzin.jsp?numer=" + ajdii, request, response);
            }
          }
        }

1 użytkowników online, w tym zalogowanych: 0, gości: 1