我有一个 JSF 2.0 应用程序,用于使用自我注册创建帐户。在第一页上,有姓名、电子邮件、uid 等字段。对于任何注册来说,我们都会显示确认页面(以及介于两者之间的其他自定义页面)和最终成功页面。每个页面都使用 faces-redirect=true 在 JSF 中呈现,因此整个过程中有 3-4 个页面(facelets)。在这个应用程序中,我使用 SessionScoped 支持 bean 来显示中间页面/确认页面/最终页面等。注册完成后,我从会话中清除 SessionScope bean 并使会话无效。
问题是:确认页面/中间页面等显示用户从第一页输入的用户详细信息(使用来自支持 bean 的 EL:#sessionBean.firstName 等)。因此,如果用户直接在浏览器中输入此 URL (host/appName/confirmationPage.xhtml),页面将加载空白值(因为用户没有直接进入第一页)。另外,注册完成后,如果用户点击后退按钮会出现空白值(过滤器类中明确设置了no-cache,所以这里不使用缓存,这是正确的行为)
如果 firstName 等不存在,我如何强制用户转到第一页。即当用户登陆页面时,确保用户仅通过此会话的第一页登陆该页面?
应该使用过滤器类吗?还是应该使用 prerenderview 事件来检查空白值并将它们重定向到第一页?这里没有“用户登录”,因为没有身份验证。我相信这是一个常见的用例,我想知道 JSF 中是否有任何最佳实践