2013-07-05 26 views
1

我一下,像這樣的NullPointerException同時設定了豆

/SocialStupendous/GetProfile.action?slno=3&slno=3 

一個超鏈接在我的ActionClassexecute方法後,有一個動作URL我有以下代碼

public String execute() { 
    int urislno=Integer.parseInt(getServletRequest().getParameter("slno")); 
    System.out.println(urislno); 
    bean.setUslno(urislno);  
} 

我得到NullPointerException時我正在執行bean.setuslno(urislno)。即使urislno正確打印爲3

ProfileBean類:

public class ProfileBean { 

    private int uslno; 

    public int getUslno() { 
    return uslno; 
    } 

    public void setUslno(int uslno) { 
    this.uslno = uslno; 
    } 
} 

這究竟是爲什麼?

+0

你爲什麼要直接從擺在首位請求訪問的參數?關於NPE,在看到什麼是空的後不應該很明顯是什麼錯? –

+0

我想要抓住那些點擊了getprofile.action這個網址的用戶。通過他/她的slno來捕捉用戶的唯一方法。因此,我想測試我是否能夠訪問url中的參數,這些參數對應於用戶的更改 –

+0

沒有必要直接訪問請求,請使用av action屬性。 –

回答

5

bean未初始化。你應該初始化它在動作

private ProfileBean bean = new ProfileBean(); 
//and add getter ans setter 

更好的方法,但是是讓容器爲你做。你只需要創建在struts.xml

<bean class="com.yourpackagename.ProfileBean" scope="default"/> 

一個bean的配置,那麼你將有

private ProfileBean bean; 

@Inject 
public void setProfileBean(ProfileBean bean) { 
    this.bean = bean; 
} 

,你不必爲解析請求的參數,這是已經被params攔截器做哪些是您的行爲應該運行的defaultStack的一部分。您應該在動作中創建屬性來保存參數值。

private Integer slno; 

public Integer getSlno() { 
    return slno; 
} 

public void setSlno(Integer uslno) { 
    this.slno = slno; 
} 

,動作看起來就像

public String execute() { 

    if (slno != null) { 
    System.out.println(slno) 
    bean.setUslno(slno); 
    } 

    ...... 
    return SUCCESS; 
} 
+0

非常感謝羅馬人,幫助了很多 –

+0

@Ravidunce如果它幫助你將這個答案標記爲已接受。 –

+0

=我對此很感興趣,請告訴我如何接受 –

相關問題