Java-检查if-Else语句是否赋值
尝试编写一些代码来检查是否在JSP中的表单中输入了某些内容,如果没有,则从会话中为其分配值 完成此操作后,将从所有参数生成一个对象 除了Java-检查if-Else语句是否赋值,java,if-statement,syntax-error,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 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);
提示
if (request.getParameter("firstname").equals (null)){
这永远不可能是真的,也可能是假的或抛出NullPointerException。使用
=
而不是equals()
您正在if/else构造中定义变量firstname
和姓氏
,这是编译器阻止的。在这种情况下,是的,它将被定义,但在其他情况下可能不会,而且编译器不会在静态代码分析上花费太多时间,它将在不进一步调查的情况下防止此类行为
不要在if/else中定义变量,而是使用默认值,在这种情况下,您可以使用:
String surname = sessionuser.getSurname();
if (request.getParameter("surname") != null){
surname = request.getParameter("surname");
}
注意,我稍微改变了一些条件
此外,if永远不会为true,它要么为false,要么抛出
NullPointerException
。改用request.getParameter(“姓氏”)==null
。您需要在if
/else
链中的块外声明变量
使用类似于:
String surname = request.getParameter("surname");
if (surname == null) {
surname = sessionuser.getSurname();
}
对其他项目重复上述步骤
局部变量仅在定义它们的块(及其子块)中可用。按照您的操作方式,您可以在if
和else
块内创建变量,这些变量在这些块之外被丢弃(无法引用)
如果需要测试这些参数是null还是空字符串,请执行如下检查:
if ((surname == null) || ("".equals(surname))) { ... }
不要使用
==
来比较字符串,这是不可靠的-它比较的是引用,而不是字符串内容。让我们从代码片段中找出错误原因
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");
}
我想应该是这样
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
而不是”
或者,您可以省去一些输入,并去掉IF-ELSE块。您可以使用类似StringUtils.defaultString的方法
)
一行对应一个字段即可:
String firstName = StringUtils.defaultString(request.getParameter("firstname"), sessionuser.getFirstname())
对其他字段执行相同的操作
此函数基本上替换了IF-ELSE块。作为奖励,您不会在IF-ELSE块中错误地声明变量:)您可以使用字符串变量,然后检查它是否为NULL
String test = request.getParameter("test");
if (username.equals(""))
{
//todo
}
非常感谢。我们把它修好了;你让我知道我是个白痴哈哈@吉米:请注意,这段代码可能不是你想象的那样。如果您希望
session.getAttibute(“…”)
返回null
s,那么此代码不会检查它。如果您需要空字符串,则此代码也不需要。使用equals
进行字符串比较,使用==null
进行空检查/空字符串和空字符串之间的唯一区别是空字符串占用内存,并在其中存储“”。无论如何,我也提到过如果你想的话可以使用null。取决于您。If类似于request.getParameter(“firstname”)==“”将永远不会为真。如果要测试相等性,需要使用“.equals”(request.getParameter(“firstname”))。请注意,当firstname为null时,这不会处理这种情况。我希望它的工作方式是,当表单的“username”行中没有输入某个内容时,它会将“username”的值设置为会话中存储的用户名(如果有意义的话)?在todo部分,您应该编写您打算执行的操作的代码
String test = request.getParameter("test");
if (username.equals(""))
{
//todo
}