![](/img/trans.png)
[英]NullPointerException error, converting string[] to int[]
[英]java NullPointerException error converting int to string
我有一個調用Java servlet的HTML表單,表單包含20個復選框(例如,名稱為c1
, c2
, c3
... 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.getParameter
。 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
作為價值,它的戈納是1
, 2
等為每個選擇的。 只有復選框才能到達此處。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.