Сбой проверки с сообщением «form: location: Ошибка проверки: значение недопустимо»
blockquote>Эта ошибка сводится к тому, что выбранная элемент не соответствует ни одному из доступных значений элемента выбора, указанного любым вложенным тегом
во время обработки запроса на отправку формы.
Как часть защиты от подделанных / взломанных запросов, JSF будет повторять все доступные выберите значения элемента и проверьте, если
selectedItem.equals(availableItem)
возвращаетtrue
для хотя бы одного доступного значения элемента. Если значение одного элемента не совпадает, вы получите именно эту ошибку проверки.Этот процесс находится под обложками в основном так, как показано ниже, в соответствии с тем, что
bean.getAvailableItems()
представляет собой полный список доступных элементов выбора, определенных в:
String submittedValue = request.getParameter(component.getClientId()); Converter converter = component.getConverter(); Object selectedItem = (converter != null) ? converter.getAsObject(context, component, submittedValue) : submittedValue; boolean valid = false; for (Object availableItem : bean.getAvailableItems()) { if (selectedItem.equals(availableItem)) { valid = true; break; } } if (!valid) { throw new ValidatorException("Validation Error: Value is not valid"); }
Итак, на основе по логике выше эта проблема может логически иметь по крайней мере следующие причины:
- Выбранный элемент отсутствует в списке доступных элементов.
- Метод
equals()
класса, представляющего выделенный элемент, отсутствует или сломан.- Если задействован пользовательский
Converter
, он вернул неправильный объект вgetAsObject()
. Возможно, это дажеnull
.Чтобы решить эту проблему:
- Убедитесь, что точно такой же список сохранен во время последующего запроса, особенно в случае несколько каскадных меню. Создание бина
@ViewScoped
вместо@RequestScoped
должно исправить его в большинстве случаев. Также убедитесь, что вы не выполняете бизнес-логику в методе getter, а вместо этого в
@PostConstruct
или методе действия (слушателя). Если вы полагаетесь на конкретные параметры запроса, вам нужно будет явно хранить их в компоненте@ViewScoped
или повторно передать их при последующих запросах, например.. См. Также Как выбрать правильную область видимости бобов?
- Убедитесь, что метод
equals()
реализован правильно. Это уже сделано на стандартных Java-типах, таких какjava.lang.String
,java.lang.Number
и т. Д., Но необязательно на пользовательских объектах / beans / entites. См. Также Правильный способ выполнения равного контракта . Если вы уже используетеString
, убедитесь, что кодировка символов запроса настроена правильно. Если он содержит специальные символы, а JSF сконфигурирован для визуализации вывода как UTF-8, но интерпретирует входные данные, например. ISO-8859-1, то он потерпит неудачу. См. Также a.o. Вход Unicode, полученный через входные компоненты PrimeFaces, поврежден .- Отлаживать / регистрировать действия вашего пользовательского
Converter
и исправлять его соответствующим образом. Для рекомендаций см. Также Значение параметра ошибки преобразования для 'null Converter' Если вы используетеjava.util.Date
в качестве доступных элементов с, убедитесь, что вы не забыли полную часть времени в шаблоне. См. Также "Ошибка проверки: значение недействительно" Ошибка
См. также:
- Наша страница
]selectOneMenu
wiki- Как заполнить параметры h: selectOneMenu из базы данных?
- Сделать несколько зависимых / каскадных selectOneMenu списков в JSF
Если кто-то может бросить некоторые советы по устранению неполадок / отладки для этой проблемы, это будет очень полезно.
blockquote>Просто задайте здесь ясный и конкретный вопрос. Не задавайте слишком широких вопросов;)