Так как это результат # 1 в Google для поиска по getValue по сравнению с getSubmittedValue, я просто хотел бы добавить, что разница между ними имеет решающее значение при проверке (т. Е. При написании собственного валидатора)
Чтобы процитировать документацию API для getSubmittedValue ():
Это ненулевое значение только между декодированием.
и проверить этапы, или когда
проверка для компонента не имеет
удалось. После преобразования и
проверка прошла успешно,
(преобразованное) значение сохраняется в
местное "значение" свойство этого
компонент, и представленное значение
сброс на ноль.
Источник: http://myfaces.apache.org/core11/myfaces-api/apidocs/javax/faces/component/UIInput.html#getSubmittedValue()
Это означает, что если проверка / преобразование было выполнено для привязки, к которой вы пытаетесь получить доступ, вы должны вызвать getValue (), в противном случае вам придется вызывать getSubmittedValue () и самостоятельно разбирать ее. Порядок, в котором они происходят, похоже, определяется их порядком в пользовательском интерфейсе, но я не думаю, что это гарантировано. Даже если это так, вы не должны рассчитывать на это, так как изменение поля в вашем пользовательском интерфейсе не должно нарушать ваш код.
Вы можете определить, была ли выполнена проверка / преобразование, просто посмотрев, что возвращает isLocalValueSet (). Если он возвращает true, тогда проверка / преобразование выполнено, поэтому вам следует вызвать getValue (). В противном случае вам нужно вызвать getSubmittedValue (), и это даст вам необработанный ввод, введенный пользователем, и вы, вероятно, захотите проанализировать его во что-то более осмысленное.
Например, объект календаря будет возвращать объект Date при вызове getValue (), но объект String при вызове getSubmittedValue (). Ваш конвертер должен проанализировать строку в Date, чтобы ее можно было проверить.
Было бы замечательно, если бы в спецификации JSF был метод, который сделал бы это для нас, но AFAIK - нет. Если определенные даты должны быть раньше других, а некоторые требуются только при определенных обстоятельствах, для этого потребуется написать несколько валидаторов. Так что это может легко стать проблемой. Это похоже на то, что вы не можете выполнять какую-либо проверку пустого поля, а это значит, что вы не можете сделать это поле обязательным условием. Если проверка была выполнена для всех полей, даже пустых, можно было бы написать специальный валидатор, чтобы вызвать исключение, если оно требуется и не требуется. Есть некоторые вещи с JSF, которые просто боль; если / пока они не исправлены, мы просто должны иметь с ними дело.
Чтобы поговорить со спецификой вопроса в оригинальном сообщении: разница здесь в том, где вы находитесь в жизненном цикле. Метод submit
выглядит как слушатель действия для кнопки, которая ставит ее в конце жизненного цикла; действия и прослушиватели действий запускаются на этапе «Вызвать приложение», который предшествует ответу рендеринга, но после проверки. Если вы собираетесь программировать в JSF, вы должны изучить и понять жизненный цикл. Это стоит времени.