2011-07-09 84 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