如何避免空指针异常?

时间:2011-07-09 01:39:40

标签: javascript ajax validation jsp servlets

我正在开发一个项目,我需要在其中创建一个带有类别下拉字段的表单。根据选择的类别,我必须填充称为subaste的第二个下拉列表。 这是我通过AJAX实现的。

我还编写了一个方法,如果所选类别为OPEN,则会在更改类别时调用以禁用子种姓下拉框:

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

但是当我点击提交按钮时,我在行中得到一个空指针异常:

subCaste = request.getParameter("subcaste");
在servlet中

。 (此行从jsp页面获取子实例的值)。

我也做过:<option value="none" selected="selected">Select</option> 在子画面的下拉中,以便选择默认值。但我仍然得到一个空指针异常。我相信在禁用下拉框后,该值根本不可用于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);
%>

我不知道如何处理这个问题。请帮帮我。

提前谢谢。

1 个答案:

答案 0 :(得分:1)

是的,你是对的。如果禁用<select>,则其值不会被POSTED。因此,当您使用request.getParameter()获取其值时,它将返回空指针异常。

让禁用<select>发布其值的标准做法是

  • 添加隐藏的输入字段,该字段将提交相同的值,并将已禁用的<select>中的值复制到<form>的{​​{1}}事件中的此隐藏字段

  • 重新启用onsubmit()的{​​{1}}活动
  • 中已停用的<select>

或者,您认为空指针异常是因为<form>设置为null,如果onsubmit()参数为subCaste,您可以尝试将subCaste变量设置为某个特定值null,看看是否可以解决。

subCaste

参考

HTML form readonly SELECT tag/input