2012-04-01 100 views
0

試圖編寫一些代碼來檢查JSP中是否有表單中輸入的內容,如果沒有,則爲其分配會話中的值。Java - 檢查值是否由If分配如果其他語句

完成此操作後,所有參數都會生成一個對象。

寫所有的代碼,但

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); 

回答

8

快速提示

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

...

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

...

這不可能是真實的,也可以是假或拋出NullPointerException。使用==代替equals()

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

2

您需要在if/else鏈中的塊之外聲明變量。

使用類似:

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

重複用於其他項目。

局部變量僅在您定義它們的塊(及其子塊)中可用。你這樣做的方式,你在ifelse塊內創建的變量在這些塊之外被丟棄(不能被引用)。

如果你需要測試,如果這些參數是null或空字符串,執行if檢查這樣的:

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

不要使用==比較字符串,這是不可靠的 - 它比較參考,而不是字符串內容。

3

讓我們把你的代碼的片段,並告訴你爲什麼你所得到的錯誤

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

在這裏,你實例化串名字if語句,當條件爲真,該字符串是創建,但只能在if語句中訪問。

你應該做的是

String firstname = sessionuser.getFirstname(); 
if (request.getParameter("firstname") != null){ 
    firstname = request.getParameter("firstname"); 
} 
-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代替""

+0

非常感謝。我們修好了它;你給我看過我是一個阻礙哈哈! – Jimmy 2012-04-01 19:10:29

+0

高興地幫助:) – Exorcist 2012-04-01 19:12:18

+0

@Jimmy:被警告,該代碼可能不會做你認爲它的作用。如果你期望'session.getAttibute(「...」)'返回null,這段代碼不會檢查這個。如果你期望空字符串,這段代碼也不會。使用'equals'進行字符串比較,'== null'進行空值檢查/ – Mat 2012-04-01 19:42:08

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塊內聲明變量:

0

您可以使用字符串變量,然後檢查它是否爲NULL。

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

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