Выбранный файл исчезает после проверки других полей

#jsf #richfaces

#jsf #richfaces

Вопрос:

Я использую a <rich:tabpanel> с 3 вкладками. На 2-й вкладке у меня есть 3 <rich:fileUpload> компонента. Все 3 поля являются обязательными. Следовательно, я выполняю проверку в вспомогательном компоненте при отправке содержимого на странице.

Если я выбираю файл в одном из компонентов загрузки файла и оставляю другие 2 пустыми, то я получаю сообщения о проверке для двух пустых компонентов, как и ожидалось. Однако первый компонент также повторно отображается и не сохраняет выбранный файл, хотя содержимое файла по-прежнему сохраняется в свойстве резервного компонента.

Как я могу сохранить выбранный файл при повторной визуализации?

Ответ №1:

Просто не перерисовывайте сами поля ввода, а только владельца (ов) сообщений о проверке. Вы можете сделать это с помощью, <a4j:commandButton> где вы указываете идентификаторы компонента (ов) сообщения в reRender атрибуте (я предполагаю, что вы используете RichFaces 3.3, а не 4.0, поскольку по умолчанию невозможно выбрать один файл для загрузки в текущем 4.0).

Обратите внимание, что вам не нужно проверять наличие требований в методе action. Достаточно просто установить required="true" для компонента (ов) ввода.

Комментарии:

1. Спасибо BalusC. Большой поклонник 🙂 Работает ли это и для rich: FileUpload? Я попробую еще раз. Я не делаю никакого конкретного повторного рендеринга. У меня есть <h: commandbutton>, который я использую для отправки, и как только я отправляю, появляется новый компонент. Еще раз спасибо за ваше драгоценное время.

2. О, моя ошибка, поскольку вы использовали RichFaces, я ожидал, что вы используете <a4j:commandButton> , который выполняет отправку Ajax и повторную визуализацию. Я отредактировал ответ.

3. Привет — Пробовал использовать a4j: CommandButton внутри <h:form> , но все равно кажется, что вся страница обновляется вместо компонентов, которые я настроил на повторный рендеринг. required = true также, похоже, не работает с компонентом rich: FileUpload.

4. Я так сожалею, что потратил ваше время, глупый я — я вернул элемент управления на страницу, а не установил null при сбое проверки. Но сообщение об ошибке сейчас не отображается: (

5. Теперь работает. Я использовал a4g: компоненты fileupload для переноса области и компоненты message — заменил его на h: outputtext. Спасибо BalusC. Однако required=»true», похоже, не работает с rich:FileUpload.