2011-07-09 98 views
1

我正在創建一個項目,我需要爲類別創建一個帶有下拉字段的表單。根據所選擇的類別,我必須填寫第二個下拉菜單,名爲subcaste。 這是我通過AJAX實現的。如何避免空指針異常?

我也寫了,這將在該類別的變化被稱爲禁用亞種姓下拉框方法,如果選擇的類別是開放的:

if(str=="OPEN"||str=="open"){ 
     document.form.subcaste.disabled=true; 
} 

但是,當我點擊提交按鈕,我得到該行中的空指針異常:

subCaste = request.getParameter("subcaste"); 

在servlet中。 (該行從jsp頁面獲取子類的值)。

我也做了:<option value="none" selected="selected">Select</option> 在subcaste的下拉,以便選擇一個默認值。但我仍然得到一個空指針異常。我相信,在我禁用下拉框後,該值根本不可用於servlet。

的詳細的代碼是:

JSP:

<td id='category'><select name='category' onchange="showSubCaste(this.value);"> 
<option value="none" selected="selected">Select</option> 
<% for (i = 0; i < categorySize; i++) {%> 
<% category = (String) categoryArr.get(i);%> 
<option value=<%= category%>><%= category%></option> 
<% }%> 
</select> 
</td> 
<td >SubCaste</td> 
<td id='subcaste'> <select name='subcaste'> 
<option value="none">Select</option> 
</select>  
</td> 

JavaScript的:

function showSubCaste(str){ 
... 
if(str=="OPEN"||str=="open"){ 
document.form.subcaste.disabled=true; 
document.form.issuingAuthority.disabled=true; 
} 
else{ 
document.form.subcaste.disabled=false; 
document.form.issuingAuthority.disabled=false; 
var url="SubCasteController"; 
url +="?caste=" +str; 
...} 

在servlet檢索值並將它傳遞給另一個JSP後:

<%String buffer = "<select name='subcaste' onchange='subCasteChanged(this.value);'><option value='none' selected='selected'>Select SubCaste</option>"; 
for (int i = 0; i < sizeInfo; i++) { 
subCaste = (String) retrievedInfo.get(i); 
buffer = buffer + "<option value='" + subCaste + "'>" + subCaste + "</option>"; 
} 
buffer = buffer + "</select>"; 
response.getWriter().println(buffer); 
%> 

我不知道如何繼續。請幫幫我。

預先感謝您。

+2

你必須向我們展示了HTML表單和servlet代碼的周圍部分的代碼更值得我們有什麼想法。 – jfriend00

回答

1

是的,你是對的。如果<select>被禁用,則其值不會被POSTED。所以當你使用request.getParameter()得到它的值時,它將返回空指針異常。

標準的做法,得到了殘疾人<select>發佈其值

  • 添加一個隱藏的輸入字段將提交相同的值,並從殘疾人<select>值複製到這個隱藏字段中<form>「小號onsubmit()事件

  • 重新啓用在<form>onsubmit()事件禁用<select>

或者,你相信空指針異常是因爲subCaste設置爲null,你可以嘗試到subCaste變量設置爲某個特定的值,如果subCaste參數是null以查看它是否可以解決。

if ( request.getParameter("subcaste") != null){ 
    subCaste = request.getParameter("subcaste"); 
}else{ 
    subCaste = "xxxxx"; //set to a specific value according to your requirement. 
} 

參考

HTML form readonly SELECT tag/input

+0

是的,我不是說它會把NPE扔到那裏,我的觀點是,因爲OP說他認爲NPE是因爲subCaste設置爲null,所以我只是建議他可以嘗試設置subCaste爲一些特定的值if 'subCaste'參數是空的,看看它是否可以解決。我只是修改了我的帖子,希望它能更清楚地表達我的觀點。 –

+0

謝謝,刪除我的評論。 – home