Некоторые базовые знания
В определенных обстоятельствах страница, сгенерированная JSF, может занять несколько раз для полной загрузки.Пусть это будет плохая сеть (т. Е. Мобильная сеть), дешевый сервер, страница станет намного больше (что все больше и больше происходит с сегодняшним компонентом с высокой степенью ориентации на JavaScript), устройство конечного пользователя устарело и не обрабатывает все этиjavascript так быстро, как хотелось бы, или по любым другим причинам.
Более того, со всей библиотекой jsf, которая просит (заставляет?) использовать методы post для использования необычных функций, пользовательский ввод должен всегда иметь действительныйjsf viewstate готов к использованию, для правильного ответа.
В этом случае для конечного пользователя не составит труда быстро перейти на другую страницу приложений или использовать уже загруженную функцию без необходимостичтобы он загружал всю страницу перед этим.
По умолчанию в реализациях mojarra и myfaces, viewstate генерируется в конце фазы представления render, чтобы иметь возможность отследить любое изменение состояния, которое может произойти вфаза визуализации.
Мохарра имеет параметр контекста ( com.sun.faces.writeStateAtFormEnd ), чтобы изменить это поведение, но это не учитывает тот факт, что состояние может измениться во время фазы просмотра рендера, и на моих лицах нет аналогичной опции.
Approach
Мой первый вопрос: каков наилучший подход к этому сценарию?
В качестве отправной точки я бы предположил, что для ограничения используется только сохранение состояния на стороне сервера.используемая пропускная способность.Это должно охватывать большинство предыдущих примеров (за исключением того, что «сервер дешев»)
Затем улучшите способ выполнения mojarra, сгенерировав идентификатор состояния представления для отправки клиенту как можно скорее, исохранить реальное состояние после того, как форма полностью закодирована, чтобы сохранить последние изменения состояния.
Предупреждение здесь будет в случае медленного или загруженного сервера, последующий запрос с этим идентификатором состояния просмотра может быть получен еще до того, как состояние будет полностью записано.И этот случай должен подождать, прежде чем запускать свой собственный процесс.
Реализация
Мой второй вопрос, предполагая, что вышеупомянутый подход действителен, будет о том, как бы вы достигли этоготаким образом, что это полностью переносимо?
Я не особо задумывался об этом, но похоже, что вмешиваться в состояние отображения состояния различных реализаций может быть сложно и может привести к серьезным последствиям.перегрузка, чтобы узнать, какая реализация делает что.Так что, возможно, есть способ сделать это только с помощью механизма спецификации jsf.