JSF, как к временному файлу отключают блоки проверки допустимости для сохранения проекта

У меня есть довольно сложная форма с большим количеством исходных данных и блоков проверки допустимости. Для пользователя это довольно занимает много времени (даже более чем час) для завершения этого, таким образом, они хотели бы смочь сохранить черновые данные, даже если это нарушает правила как не вводимые обязательные поля.

Я полагаю, что эта проблема характерна для многих веб-приложений, но не может найти хорошо распознанный шаблон, как это должно быть реализовано. Можно ли советовать, как достигнуть этого?

На данный момент я вижу следующие опции:

  1. использование immediate=true на кнопке "Save draft" не работает, поскольку данные UI не хранились бы на бобе, таким образом, я не смогу получить доступ к нему. Технически я мог найти данные в дереве компонента UI, но пересечение, которое, кажется, не хорошая идея.
  2. удалите всю полевую проверку из страницы и проверьте данные программно в слушателе действия, определенном для формы. Снова, не хорошая идея, форма действительно сложна, существует много полей, таким образом, проверка реализовала этот путь, будет очень грязно.
  3. реализуйте мои собственные блоки проверки допустимости, которыми управлял бы некоторый атрибут запроса, который будет установлен для стандартного представления формы (с полной ожидаемой проверкой) и был бы сброшен для, "сохраняют как проект" представления (когда проверка должна быть пропущена). Снова, не хорошее решение, я должен был бы обеспечить свои собственные обертки для всех блоков проверки допустимости, которые я использую.

Но поскольку Вы видите, что никто не действительно разумен. Нет ли действительно никакое простое решение проблемы?

12
задан Robert Harvey 17 July 2012 в 15:02
поделиться

1 ответ

Это действительно не так просто. Валидация довольно тесно связана с жизненным циклом JSF.

Я бы лично выбрал вариант 1. Это действительно грязная работа, но вы можете просто спрятать ее в служебном классе или около того. Просто возьмите из корневого каталога просмотра, рекурсивно переберите его дочерние элементы, тем самым проверяя, истинно ли компонент instanceof EditableValueHolder , сохраните найденную пару id-value в сортировке из Карта и, наконец, сохраните ее.

В качестве четвертой альтернативы вы можете сохранить все данные независимо, используя ajaxical полномочия. В этом может помочь jQuery .

$.post('/savedraft', $('#formid').serialize());

Для этого требуется только поддержка Javascript на стороне клиента.


Обновление : служебная библиотека JSF OmniFaces имеет обработчик тегов именно для этой цели. Это действительно было непростое решение, так как для него также требуется специальный . Он выполняет свою работу, предоставляя настраиваемый экземпляр FacesContext на этапах проверки и обновления значений модели, который выполняет NOOP в методах validationFailed () и renderResponse () . Таким образом, компоненты по-прежнему недействительны, а сообщения все еще прикреплены, но он все равно перейдет к значениям модели обновления и вызовет фазы приложения.

8
ответ дан 2 December 2019 в 22:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: