Как избежать исключения Null Pointer? - PullRequest
3 голосов
/ 09 июля 2011

Я работаю над проектом, в котором мне нужно создать форму с выпадающим полем для категории. И в соответствии с выбранной категорией, я должен заполнить второй выпадающий список под названием. Этого я достигаю через AJAX.

Я также написал метод, который будет вызываться при изменении категории, чтобы отключить раскрывающийся список подкатегории, если выбранная категория ОТКРЫТА как:

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

Но когда я нажимаю кнопку отправки, я получаю исключение нулевого указателя в строке:

subCaste = request.getParameter("subcaste");

в сервлете. (Эта строка принимает значение подкадра со страницы jsp).

Я также сделал: <option value="none" selected="selected">Select</option> в раскрывающемся списке субкасты, чтобы выбрать значение по умолчанию. Но я все еще получаю исключение нулевого указателя. Я считаю, что после того, как я отключил раскрывающийся список, это значение не будет доступно сервлету вообще.

Подробный код:

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;
...}

После получения значений в сервлете и передачи их в другой 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 Ответ

1 голос
/ 09 июля 2011

Да, вы правы.Если <select> отключен, его значения не будут отправлены.Поэтому, когда вы получите его значение с помощью request.getParameter(), он вернет исключение нулевого указателя.

Стандартные методы получения отключенного <select> для отправки его значения:

  • Добавитьскрытое поле ввода, в которое будет отправлено то же значение и скопировано значение из отключенного <select> в это скрытое поле в <form> 's onsubmit() событие

или

  • Повторное включение отключенного <select> в onsubmit() <form> событии

Или, как вы считаете, исключение нулевого указателя связано с тем, что subCaste имеет значение null, вы можете попытаться установить переменную subCaste на какое-то конкретное значение, если параметры subCaste равны нулю, чтобы увидеть, можно ли ее решить.

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

Ссылка

HTML-форма только для чтения ВЫБЕРИТЕ тег / ввод

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...