Javascript 如何避免空指针异常?

Javascript 如何避免空指针异常?,javascript,ajax,validation,jsp,servlets,Javascript,Ajax,Validation,Jsp,Servlets,我正在做一个项目,在这个项目中,我需要为类别创建一个带有下拉字段的表单。根据所选的类别,我必须填充第二个下拉列表subcaste。 这是我通过AJAX实现的 我还编写了一个方法,该方法将在类别更改时调用,以禁用子种姓下拉框(如果所选类别打开为): if(str=="OPEN"||str=="open"){ document.form.subcaste.disabled=true; } 但当我点击提交按钮时,我在行中得到一个空指针异常: subCaste = request.g

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

我还编写了一个方法,该方法将在类别更改时调用,以禁用子种姓下拉框(如果所选类别打开为):

if(str=="OPEN"||str=="open"){
        document.form.subcaste.disabled=true;
} 
但当我点击提交按钮时,我在行中得到一个空指针异常:

subCaste = request.getParameter("subcaste");
在servlet中。(此行从jsp页面获取子类别的值)

我还做了:
选择
在子类别的下拉列表中,选择默认值。但我仍然得到一个空指针异常。我认为禁用下拉框后,servlet根本无法使用该值

详细代码为:

JSP:

检索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);
%>

我不知道如何进行这项工作。请帮帮我


提前谢谢你。

是的,你说得对。如果禁用了
,则不会发布其值。因此,当您使用
request.getParameter()
获取其值时,它将返回空指针异常

让禁用的
发布其值的标准做法如下

  • 添加一个隐藏的输入字段,该字段将提交相同的值,并将值从禁用的
    复制到
    onsubmit()事件中的该隐藏字段中

  • onsubmit()事件中重新启用禁用的
或者,如果您认为空指针异常是因为
subCaste
设置为空,那么如果
subCaste
参数为空,您可以尝试将
subCaste
变量设置为某个特定值,以查看是否可以解决该问题

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

参考


您必须向我们展示HTML表单的代码和servlet代码的更多相邻元素,以便我们了解。是的,我不是说它会将NPE抛出,我的观点是,因为OP说他认为NPE是因为子类设置为null,因此,我建议他可以尝试将subCaste设置为某个特定值,如果
subCaste
参数为空,看看是否可以解决。我刚刚修改了我的帖子,希望它能更清楚地表达我的观点。
<%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);
%>
if (  request.getParameter("subcaste") != null){
    subCaste = request.getParameter("subcaste");
}else{
   subCaste = "xxxxx"; //set to a  specific value according to your requirement. 
}