Как передать значения текстового поля и каково действие весеннего контроллера mvc?

108
10

Я работаю над проектом контроллера Spring MVC.

    Первая кнопка - INSERT. Как только я нажимаю кнопку INSERT, я показываю три текстовых поля чуть ниже кнопки INSERT. Первый текстовый ящик - это datacenter, второе текстовое поле - это node а третий текстовый код - это data. Вторая кнопка - UPDATE. Как только я нажимаю кнопку UPDATE, я показываю то же самое над тремя текстовыми полями чуть ниже кнопки UPDATE. Третья кнопка: DELETE. Как только я нажимаю кнопку DELETE, я показываю только одно текстовое поле чуть ниже кнопки DELETE. В этом текстовом поле будет node. Четвертая кнопка - PROCESS. Как только я нажму кнопку PROCESS, я покажу четыре текстовых поля чуть ниже кнопки PROCESS. В этом первом текстовом поле будет datacenter, вторым текстовым полем будет node, третьим текстовым полем будут data а четвертое текстовое поле будет conf

И, наконец, появится кнопка отправки, которую я буду нажимать.

И вот мой jsfiddle, в котором есть все, о чем я говорил выше.

Постановка задачи:-

Теперь, что мне нужно сделать, предположим, что если я сначала Insert кнопку " Insert, которая будет содержать три текстовых поля чуть ниже кнопки "Вставить", а затем после ввода некоторых значений в этих трех текстовых полях я нажму кнопку " Submit, которая должна передать все эти три значения текстового поля вместе с тем действием, которое я сделал (что означает "INSERT", "UPDATE" или "DELETE" или "PROCESS") для моего testOperations метода testOperations. Поэтому для этого случая, если я набрал dc1 в датацентре, hello в узле, world в данных, тогда он должен передать все эти три значения моему методу контроллера, но он также должен передать значение conf как null bcoz, это текстовое поле не было для кнопки Insert поэтому, когда мы нажимаем кнопку отправки, она должна передавать значение conf как значение null в метод контроллера.

Аналогично, если я нажму кнопку "Удалить", тогда он отобразит только одно текстовое поле под кнопкой "Удалить", и как только я нажму кнопку "Отправить", тогда он должен передать значение "Удалить" в качестве действия, значение датацентра должно быть нулевым, значение узла в качестве фактического значения, которое мы набрали в поле значение данных должно быть равно null, а значение conf должно быть нулевым. Аналогично для других.

Ниже мой метод в коде контроллера -

   @RequestMapping(value = "testOperation", method = RequestMethod.GET)
public Map<String, String> testOperation() {
final Map<String, String> model = new LinkedHashMap<String, String>();
return model;
}

@RequestMapping(value = "testOperation", method = RequestMethod.POST)
public Map<String, String> testOperations(@RequestParam String action,
@RequestParam String datacenter,
@RequestParam String node,
@RequestParam String data,
@RequestParam String conf) {
final Map<String, String> model = new LinkedHashMap<String, String>();

System.out.println(action);
System.out.println(datacenter);
System.out.println(node);
System.out.println(data);
System.out.println(conf);

return model;
}

Но почему-то всякий раз, когда я нажимаю кнопку отправки после ввода некоторых значений, это дает мне исключение как исключение Bad Request. И я знаю причину, почему? Потому что предположим, что для случая Insert после ввода значений в этих трех текстовых полех я нажал кнопку "Отправить", тогда значение conf не установлено, и мой метод контроллера принимает параметр conf, так что это причина, по которой он выбрасывает исключение.. И чтобы исправить это, я может удалить параметр conf, но затем для случая Процесса, мне это нужно.

Итак, есть ли способ, я могу передать значение null для этого текстового поля, которое мне не нужно для определенных кнопок контроллера, чтобы избежать этой проблемы?

спросил(а) 2021-01-25T18:10:37+03:00 5 месяцев назад
1
Решение
89

У вас есть два варианта решения вашей проблемы.

вариант 1) Все параметры, которые не являются обязательными для всех трех действий, должны быть необязательными, то есть:

@RequestParam (required = false, defaultValue = null) Строка conf

Если вы добавите "required = false" ко всем необязательным параметрам, вы не получите исключение

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

 @RequestMapping(value = "insertOperation", method = RequestMethod.POST)

public Map<String, String> insertOperation(
@RequestParam String action,
@RequestParam String datacenter,
@RequestParam String node,
@RequestParam String data
) {}

а также:

@RequestMapping(value = "updateOperation", method = RequestMethod.POST)
public Map<String, String> updateOperation(@RequestParam String action,
@RequestParam String datacenter,
@RequestParam String node,
@RequestParam String data,
@RequestParam String conf,
) {}

Удачи!

ответил(а) 2021-01-25T18:10:37+03:00 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема