Java - Проверка, назначено ли значение с помощью операторов If Else - PullRequest
0 голосов
/ 01 апреля 2012

Попытка написать некоторый код, который проверяет, было ли что-то введено в форму в JSP, а если нет, присваивает ему значение из сеанса.

Как только это будет сделано, объект будет сделан из всех параметров.

Написан весь код, но

User user = new User(username, firstname, surname, password); comes up with a cannot **find symbol error** 

Я понимаю, что это потому, чтони в одном из случаев.Кто-нибудь покажет мне, как я могу изменить код, чтобы он мог использовать эти значения?

Код:

  try {
                    User sessionuser =(User)session.getAttribute("User");
                    String username = sessionuser.getUsername();

                    if (request.getParameter("firstname").equals (null)){
                        String firstname = sessionuser.getFirstname();
                    }
                    else{String firstname = request.getParameter("firstname");
                    }

                    if (request.getParameter("surname").equals (null)){
                        String surname = sessionuser.getSurname();
                    }
                    else{String surname = request.getParameter("surname");
                    }
                    String password = request.getParameter("password");

                    User user = new User(username, firstname, surname, password);
                    //this.updateUser(user); 
                    this.updateUser(username, firstname, surname, password);

                    //user.updateUser();

                    session.setAttribute("User", user);
                    request.setAttribute("u", user);
                    request.getRequestDispatcher("UpdateUser.jsp").forward(request,     response);

Ответы [ 7 ]

8 голосов
/ 01 апреля 2012

Быстрый намек

if (request.getParameter("firstname").equals (null)){ 

...

if (request.getParameter("surname").equals (null)){

...

Это никогда не может быть правдой, может быть ложным или выдавать исключение NullPointerException. Используйте == вместо equals()

3 голосов
/ 01 апреля 2012

Давайте возьмем фрагмент вашего кода и расскажем, почему вы получаете ошибку

if (request.getParameter("firstname").equals (null)){
  String firstname = sessionuser.getFirstname();
}

Здесь вы создаете экземпляр строки firstname в операторе if, когда условие истинно, строка создается, но доступна только внутри оператора if.

Что вы должны сделать, это

String firstname = sessionuser.getFirstname();
if (request.getParameter("firstname") != null){
  firstname = request.getParameter("firstname");
}
2 голосов
/ 01 апреля 2012

Вам необходимо объявить переменные вне блоков в цепочках if / else.

Использовать что-то вроде:

String surname = request.getParameter("surname");
if (surname == null) {
  surname = sessionuser.getSurname();
}

Повторите для других элементов.

Локальные переменные доступны только в блоке, в котором вы их определяете (и его подблоках).То, как вы это делаете, ваши переменные создания внутри блоков if и else, которые отбрасываются (на которые нельзя ссылаться) вообще за пределами этих блоков.

Если вам нужно проверить, соответствуют ли эти параметрыявляются нулевыми или пустыми строками, выполните проверки if следующим образом:

if ((surname == null) || ("".equals(surname))) { ... }

Не используйте == для сравнения строк, это ненадежно - сравниваются ссылки, а не содержимое строки.

2 голосов
/ 01 апреля 2012

Вы определяете переменные firstname и surname в конструкции if / else, которая запрещена компилятором. В этом случае, да, это будет определено, но в других случаях это может не произойти, и компилятор не будет тратить слишком много времени на статический анализ кода, он предотвратит такое поведение без дальнейшего изучения.

Вместо определения переменной в if / else используйте значение по умолчанию, в этом случае вы можете использовать:

String surname = sessionuser.getSurname();

if (request.getParameter("surname") != null){
  surname = request.getParameter("surname");
}

Обратите внимание, что я немного изменил условия.

Кроме того, ваше if никогда не будет истинным, оно будет либо ложным, либо броском NullPointerException. Вместо этого используйте request.getParameter("surname") == null.

1 голос
/ 02 апреля 2012

Кроме того, вы можете сэкономить немного времени на печатание и избавиться от блоков IF-ELSE.Вы можете использовать метод, такой как StringUtils.defaultString.

http://commons.apache.org/lang/api-2.5/org/apache/commons/lang/StringUtils.html#defaultString(java.lang.String,%20java.lang.String)

Одна строка для одного поля будет делать:

String firstName = StringUtils.defaultString(request.getParameter("firstname"), sessionuser.getFirstname())

Сделайте то же самое для других полей.

Эта функция в основном заменяет ваш блок IF-ELSE.В качестве бонуса вы не ошибетесь, объявив переменную внутри блока IF-ELSE :)

0 голосов
/ 04 января 2014

Вы можете использовать строковые переменные, а затем проверить, имеет ли оно значение NULL или нет.

String test = request.getParameter("test");

if (username.equals(""))
{
    //todo
}
0 голосов
/ 01 апреля 2012

Должно быть так, я думаю

 try {
                User sessionuser =(User)session.getAttribute("User");
                String username = sessionuser.getUsername(),firstname="",surname="",password="";

                if (request.getParameter("firstname") == ""){
                    firstname = sessionuser.getFirstname();
                }
                else{firstname = request.getParameter("firstname");
                }

                if (request.getParameter("surname") == ""){
                    surname = sessionuser.getSurname();
                }
                else{surname = request.getParameter("surname");
                }
                password = request.getParameter("password");

                User user = new User(username, firstname, surname, password);
                //this.updateUser(user); 
                this.updateUser(username, firstname, surname, password);

                //user.updateUser();

                session.setAttribute("User", user);
                request.setAttribute("u", user);
                request.getRequestDispatcher("UpdateUser.jsp").forward(request,     response);

Вы также можете использовать null вместо ""

...