最近在寫簡易的JSP Web,先實作了一個註冊頁面,而當我在檢查這個account是否有人
使用時,若已有人使用,我會使用jsp tag forward返回前一頁,並且會將我之前填過的資料
帶出來。
我在其他欄位的部分是這樣寫,如下:
<input type="text" name="acc" size="16" value="<%= request.getParameter("acc") == null ? "" : request.getParameter("acc") %>">
這一段可以帶出我之前所填account column,此時我就可以知道我之前填啥!
但是,若我們選擇了一個radio時,在返回時已幫我們選擇了之前選的,此時我一開始
這樣寫,如下:
<input type="radio" name="gender" value="1" <%= request.getParameter("gender") == "1" ? "checked" : "" %>>
這一段一直會跑到進入 :,即使我前一頁填的是1,forward之後還是印出""
後來才發現原來是String Pool的問題,由於 "1"這個物件存在於String Pool中,假設我們利用
request.getParameter("gender") 去跟它比較,即使知道request.getParameter("gender") 的值是"1",
但它也不會去String Pool中找是否已存在"1"的物件,而自己另立了一個,導致兩個是不同的
物件。如果您堅持還是要使用==去比較的話,可以改寫成如下:
<input type="radio" name="gender" value="1" <%= request.getParameter("gender") == null ? "" : request.getParameter("gender").intern() == "1" ? "checked" : "" %>>
那麼intern()就會先去檢查String Pool內是否已有存在的"1"物件,有的話就直接引用
也可以直接使用equals去判斷是否值相等,這樣就不用考慮object address是否相同
<input type="radio" name="gender" value="1" <%= request.getParameter("gender") == null ? "" : request.getParameter("gender").equals("1") ? "checked" : "" %>>
而請注意要使用了兩個 ? : 是因為必須先檢查object是否為null,否則會exception。
使用時,若已有人使用,我會使用jsp tag forward返回前一頁,並且會將我之前填過的資料
帶出來。
我在其他欄位的部分是這樣寫,如下:
<input type="text" name="acc" size="16" value="<%= request.getParameter("acc") == null ? "" : request.getParameter("acc") %>">
這一段可以帶出我之前所填account column,此時我就可以知道我之前填啥!
但是,若我們選擇了一個radio時,在返回時已幫我們選擇了之前選的,此時我一開始
這樣寫,如下:
<input type="radio" name="gender" value="1" <%= request.getParameter("gender") == "1" ? "checked" : "" %>>
這一段一直會跑到進入 :,即使我前一頁填的是1,forward之後還是印出""
後來才發現原來是String Pool的問題,由於 "1"這個物件存在於String Pool中,假設我們利用
request.getParameter("gender") 去跟它比較,即使知道request.getParameter("gender") 的值是"1",
但它也不會去String Pool中找是否已存在"1"的物件,而自己另立了一個,導致兩個是不同的
物件。如果您堅持還是要使用==去比較的話,可以改寫成如下:
<input type="radio" name="gender" value="1" <%= request.getParameter("gender") == null ? "" : request.getParameter("gender").intern() == "1" ? "checked" : "" %>>
那麼intern()就會先去檢查String Pool內是否已有存在的"1"物件,有的話就直接引用
也可以直接使用equals去判斷是否值相等,這樣就不用考慮object address是否相同
<input type="radio" name="gender" value="1" <%= request.getParameter("gender") == null ? "" : request.getParameter("gender").equals("1") ? "checked" : "" %>>
而請注意要使用了兩個 ? : 是因為必須先檢查object是否為null,否則會exception。
留言
張貼留言