сервлет принимает пустые значения из флажков - PullRequest
1 голос
/ 07 марта 2019

enter image description here здесь у меня есть страница JSP, которая позволяет пользователю применять свое имя, свой возраст и свой язык программирования

<form action="./getPost" method="POST" >

     <label> name </label>      <input type="text" name="name" > <br><br>
     <label> age </label> &nbsp <input type="text" name="age" > <br><br>


    <label> programming langage </label> <br>
    <input type="checkbox" name="fav" value="java"> java <br>
    <input type="checkbox" name="fav" value="php"> php <br>
    <input type="checkbox" name="fav" value="python"> python <br><br>

    <input type="submit" value="submit post">

    </form>

так сервлет получает данные

        String name = request.getParameter("name");
        String age = request.getParameter("age");
        String[] lang = request.getParameterValues("fav");

            InsertPost.add(new Post(name, age, lang));

когда я заполняю все поля формы и нажимаю на кнопку, она вставляет данные в базу данных. Затем я проверил, чтобы отправить его, не устанавливая флажок, который вызвал ошибку (java.lang.NullPointerException). проблема в том, что я хочу оставить это необязательное средство необязательным, если пользователь хочет выбрать или нет. так как я могу заставить сервлет обрабатывать нулевые значения из флажков

Ответы [ 2 ]

0 голосов
/ 07 марта 2019

// Одно предложение: обрабатывать нуль и заменять пустой строкой

 String name = (request.getParameter("name") == null ? "": request.getParameter("name"));
 String age = (request.getParameter("age") == null) ? "" : request.getParameter("age"));
 String[] lang = (request.getParameterValues("fav") == null) ? "": request.getParameterValues("fav"));

Надеюсь, это поможет вам.

0 голосов
/ 07 марта 2019

Как решить эту проблему:

Опция 1: (отправка пустой строки вместо нуля) Предполагая, что ваша таблица имеет ненулевое ограничение для поля fav.

String name = request.getParameter("name");
String age = request.getParameter("age");
List<String> lang = request.getParameterValues("fav");
if(lang==null) {
    lang = new String[] {""};
}
InsertPost.add(new Post(name, age, lang));
//not recommended as it will add 1-byte of empty string even if there is no fav language

Примечание:

Вы должны поместить вызов InsertPost.add(...) в блок try-catch , чтобы обработать исключение во время вставки данных в БД, а затем показать его на пользовательском интерфейсе как часть лучшего практики. Кроме того, установите флажок, если имя и возраст равны нулю, и обработайте его.

Вариант 2: (отправка нулевого значения и удаление нулевого ограничения из таблицы в поле fav)

//how you are doing it previously will work.
InsertPost.add(new Post(name, age, lang));

Причина ошибки


Ваша база данных не ожидает нулевого значения в поле favorite languages

...