尝试编写一些代码来检查是否已在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);
答案 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构造中定义变量firstname
和surname
,这是编译器阻止的。在这种情况下,是的,它将被定义,但在其他情况下它可能不会,并且编译器不会在静态代码分析上花费太多时间,它将阻止此类行为而无需进一步调查。
不是在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();
}
重复其他项目。
局部变量仅在您定义它们的块(及其子块)中可用。你正在这样做的方式,你在if
和else
块内部创建变量,这些变量在这些块之外被丢弃(不能被引用)。
如果您需要测试这些参数是空字符串还是空字符串,请执行if
检查,如下所示:
if ((surname == null) || ("".equals(surname))) { ... }
不要使用==
来比较字符串,这是不可靠的 - 它会比较引用,而不是字符串内容。
答案 4 :(得分:1)
或者,你可以节省一点打字并摆脱IF-ELSE块。您可以使用StringUtils.defaultString等方法。
一个字段的一行将执行:
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
代替""