Я работал с исключением нулевого указателя в коде, подобном следующему:
<%
SessionData session = getSessionData(request);
Webpage webPage = null;
if (session!= null) {
webPage = session.getWebPage();
}
%>
<script type="text/javascript">
//NullPointer happens here, webPage is null when the session is lost
<tags:ComboBox
comboBox="<%=webPage.getComboBox()%>" />
</script>
Я был удивлен, когда смог переместить окончание if (session!=null
после javascript, который, кажется, игнорирует этот код, когда сеанс был нулевым.
<%
SessionData session = getSessionData(request);
Webpage webPage = null;
if (session!= null) {
webPage = session.getWebPage();
//} move this to below
%>
<script type="text/javascript">
//NullPointer happens here, webPage is null when the session is lost
<tags:ComboBox
comboBox="<%=webPage.getComboBox()%>" />
</script>
<% } %> //moved to here
Скриптлет для тега ComboBox
в скобках больше не запускается? Я бы подумал, что он все равно попытается убрать поле со списком с веб-страницы и все равно получит нулевой указатель. Я ошибаюсь, думая, что все скриптлеты получают свои значения до фактического запуска кода?
(просто хотел упомянуть, что есть включенный скрипт, который перенаправляет страницу, если нет сеанса. Я получаю NullPointer с первым разделом кода и правильно перенаправляю со вторым разделом)