jsf - 长加载页面和视图状态
问题描述
一些背景知识
在某些情况下,由 JSF 生成的页面可能需要一些时间才能完全加载。假设网络很差(即移动网络),服务器很便宜,页面很大(今天越来越多的以javascript为重点的组件),最终用户设备已经过时并且无法处理所有这些javascript 尽可能快,或者任何其他原因。
此外,由于所有 jsf 库都要求(强制?)您使用 post 方法来使用花哨的功能,用户输入必须始终具有准备好使用的有效 jsf 视图状态,以便正确回答。
在这些情况下,对于最终用户而言,快速导航到应用程序的其他页面或使用已加载的功能而不让他在这样做之前加载整个页面不应该是一件痛苦的事。
默认情况下,在 mojarra 和 myfaces 实现中,视图状态是在渲染视图阶段结束时生成的,以便能够捕获渲染视图阶段可能发生的任何状态变化。
Mojarra 有一个上下文参数 ( com.sun.faces.writeStateAtFormEnd ) 来改变这种行为,但这并不能处理在渲染视图阶段状态可能会改变的事实,并且 myfaces 上没有类似的选项。
方法
我的第一个问题是处理这种情况的最佳方法是什么?
作为起点,我假设仅使用服务器端状态保存来限制使用的带宽。这应该涵盖了前面的大部分示例(“服务器便宜”除外)
然后,通过生成视图状态 id 尽快发送给客户端来改进 mojarra 的处理方式,并在表单完全编码后保存真实状态,以便保存最后的状态更改。
此处需要注意的是,如果服务器速度较慢或繁忙,则在状态完全写入之前可能会收到具有该视图状态 ID 的后续请求。而这种情况下应该必须等待才能开始自己的过程。
执行
我的第二个问题,假设上述方法有效,您将如何以完全可移植的方式实现这一目标?
我并没有真正考虑过,但看起来干预不同实现的视图状态写入可能会很棘手,并且可能导致严重的大脑超负荷以知道哪个实现做什么。所以也许只有使用jsf规范机制才能做到这一点。
解决方案
推荐阅读
- ios - 两个目标的故事板共享
- string - Elixir 仅将单词的首字母大写
- c# - 从 2 个数组返回一组静态数据的最佳做法是什么
- ios - 处理用于注销的导航控制器
- c - 指针混淆 - 错误:从不兼容的指针类型传递“值”的参数 1;注意:预期为“...”,但参数类型为“...”
- c# - 返回类型中引用类型的可空性与被覆盖的成员不匹配
- regex - 谷歌表格,我的 importxml 公式突然坏了
- python - 无法使用 python urllib 解析 Google 标题
- swift - 您如何知道登录问题是由模拟器还是您的代码造成的?
- shiny - R Shiny dq_render_handsontable 添加列并尝试编辑新列的单元格时出错