Джо Альбахари (автор C # 3.0 в двух словах и LINQPad) написал утилиту под названием PredicateBuilder, которая может использоваться для функций AND и OR.
http: //www.albahari. com / nutshell / predicatebuilder.aspx
Хотя он работает с функциями, он является открытым исходным кодом, поэтому вы можете проверить его и посмотреть, как он работает.
Я обнаружил проблему, вызвавшую ошибку HTTP.
В функции setFalse()
, которая вызывается кнопкой Сохранить, мой код пытался отправить форму, содержащую кнопку.
function setFalse(){
document.getElementById("hasId").value ="false";
document.deliveryForm.submit();
document.submitForm.submit();
, когда я удаляю document.submitForm.submit();
, это работает:
function setFalse(){
document.getElementById("hasId").value ="false";
document.deliveryForm.submit()
@Roger Lindsjö Спасибо, что обнаружили мою ошибку, в которой я не указывал правильный параметр!
Возможно, вам придется изменить строку
@RequestMapping(value = "/add", method = RequestMethod.GET)
на
@RequestMapping(value = "/add", method = {RequestMethod.GET,RequestMethod.POST})
Я не уверен, поможет ли это, но у меня была та же проблема.
Вы используете springSecurityFilterChain с защитой CSRF. Это означает, что вы должны отправить токен, когда отправляете форму через запрос POST. Попробуйте добавить следующую форму в вашу форму:
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
Проблема в том, что ваш контроллер ожидает параметр hasId = false или hasId = true , но вы не передаете его. Ваше скрытое поле имеет идентификатор hasId , но передается как hasCustomerName , поэтому сопоставление не найдено.
Либо измените путь скрытого поля на hasId , либо укажите параметр отображения, чтобы ожидать hasCustomerName = true , или hasCustomerName = false .