Java - 检查If Else语句是否赋值

时间:2012-04-01 18:47:24

标签: java if-statement syntax-error

尝试编写一些代码来检查是否已在JSP中的表单中输入了某些内容,如果没有,则为其分配会话中的值。

完成此操作后,将从所有参数中创建一个对象。

编写所有代码但

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

我意识到这是因为它不属于任何一个ifs。有人会告诉我如何更改代码以便它可以使用这些值吗?

代码:

  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 个答案:

答案 0 :(得分:8)

快速提示

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

...

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

...

这永远不会是真的,它可能是false或抛出NullPointerException。使用==代替equals()

答案 1 :(得分:3)

让我们拿一段代码告诉你为什么会收到错误

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

在这里,您将在if语句中实例化字符串firstname,当条件为true时,创建字符串但只能在if语句中访问。

你应该做的是

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

答案 2 :(得分:2)

您正在if / else构造中定义变量firstnamesurname,这是编译器阻止的。在这种情况下,是的,它将被定义,但在其他情况下它可能不会,并且编译器不会在静态代码分析上花费太多时间,它将阻止此类行为而无需进一步调查。

不是在if / else中定义变量,而是使用默认值,在这种情况下,您可以使用:

String surname = sessionuser.getSurname();

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

请注意,我稍微改变了条件。

此外,你的if永远不会是真的,它将是假的或抛出NullPointerException。请改用request.getParameter("surname") == null

答案 3 :(得分:2)

您需要在if / else个链中的块之外声明变量。

使用类似:

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

重复其他项目。

局部变量仅在您定义它们的块(及其子块)中可用。你正在这样做的方式,你在ifelse块内部创建变量,这些变量在这些块之外被丢弃(不能被引用)。

如果您需要测试这些参数是空字符串还是空字符串,请执行if检查,如下所示:

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

不要使用==来比较字符串,这是不可靠的 - 它会比较引用,而不是字符串内容。

答案 4 :(得分:1)

或者,你可以节省一点打字并摆脱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块中声明变量:)

答案 5 :(得分:-1)

您可以使用字符串变量,然后检查它是否为NULL。

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

if (username.equals(""))
{
    //todo
}

答案 6 :(得分:-3)

应该像这样我认为

 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代替""