簡體   English   中英

java NullPointerException錯誤將int轉換為string

[英]java NullPointerException error converting int to string

我有一個調用Java servlet的HTML表單,表單包含20個復選框(例如,名稱為c1c2c3 ... c20 )。

我試圖在java布爾數組cbox捕獲這些復選框的值。

以下代碼......

int ii=0;
boolean cbox[] = new boolean[20];
for (ii=0; ii<20; ii++)
   cbox[ii] = (req.getParameter("c"+String.valueOf((int)(ii+1))).equals("on"))?true:false;

給出了java.lang.NullPointerException

但是,如果我要將其更改為(例如,在valueOf刪除ii ),則不會出現運行時錯誤:

   cbox[ii] = (req.getParameter("c"+String.valueOf((int)(1))).equals("on"))?true:false;

當然,這不能讓我到達我想要的地方。 我必須在某個地方犯一個愚蠢的錯誤,但我無法發現它。 有人看到了嗎?

當您嘗試引用未初始化的Object(null)時,會發生NullPointerException

查看代碼,有兩種可能性:

  • req為null req.getParameter
  • 您嘗試檢索的參數不存在因此為null req.getParameter("c"+String.valueOf((int)(ii+1)))

順便說一下,如果返回的參數已經是布爾值,則無需檢查它的值並返回true或false,因為它的值已經為true或false。 您可以將其簡化為:

cbox[ii] = (req.getParameter("c"+String.valueOf((int)(ii+1))).equals("on"));

編輯:要回答您的評論,您可以驗證參數是否容易存在:

String param = req.getParameter("c" + String.valueOf(ii + 1));
cbox[ii] = "on".equals(param);

為了更加安全,我還會檢查req以確保它不為空。

if(req != null)
{
    String param = req.getParameter("c" + String.valueOf((ii + 1));
    cbox[ii] = "on".equals(param);
}

請注意,我刪除了cast (int)ii + 1因為表達式已經是整數類型。

另外,如果ii只用作迭代器id,你可以直接在循環中聲明它,所以不要這樣做:

int ii = 0;
for(ii = 0; ii < 20; ii++)

你可以直接寫for(int ii = 0; ii < 20; ii++)

這里的問題是在servlet中,您將收到on為HTML選擇復選框否則返回null默認值。 由於未選中所有復選框,因此您將獲得NPE。 試試這段代碼:

boolean[] cbox = new boolean[20];
for(int i = 0; cbox.length > i; i++) {
   cbox[i] = null != req.getParameter("c" + (1 + i));//if not null then true else false
}

您還可以選擇其他選項:

在您的html / jsp中創建具有相同名稱但值不同的復選框:

<input type="checkbox" name="cbox" value="1"/>
<input type="checkbox" name="cbox" value="2"/>
...
<input type="checkbox" name="cbox" value="20"/>

servlet中,您可以使用單行獲取所有選中的復選框:

String[] cbox = req.getParameterValues("cbox");

在這里,你不會得到on作為價值,它的戈納是12等為每個選擇的。 只有復選框才能到達此處。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM