我正在开发一个项目,我需要在其中创建一个带有类别下拉字段的表单。根据选择的类别,我必须填充称为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);
%>
我不知道如何处理这个问题。请帮帮我。
提前谢谢。
答案 0 :(得分:1)
是的,你是对的。如果禁用<select>
,则其值不会被POSTED。因此,当您使用request.getParameter()
获取其值时,它将返回空指针异常。
让禁用<select>
发布其值的标准做法是
<select>
中的值复制到<form>
的{{1}}事件中的此隐藏字段或
onsubmit()
的{{1}}活动<select>
或者,您认为空指针异常是因为<form>
设置为null,如果onsubmit()
参数为subCaste
,您可以尝试将subCaste
变量设置为某个特定值null,看看是否可以解决。
subCaste
参考