我有一个在 Mojarra 2.1.1 / Glassfish 3.1 上运行的应用程序,现在已经增长到 150,000 多行代码。该应用程序将 ajax 与 ViewScoped 托管 bean 和 page-redirect-get 模式(即 faces-redirect=true)一起广泛使用。
一直让我烦恼的一件事是从页面到页面以及从 bean 到 bean(每个页面都有它自己的支持 bean)显然缺乏传递参数的便利性。
我一直无法让闪光灯工作。我通常需要在下一页的 preRenderView 事件侦听器中访问我已写入闪存的数据。这不能可靠地工作,尤其是在应用程序重新部署之后。
我已经阅读了 CDI 并花了几天时间尝试从 JSF 托管 bean 迁移到 CDI bean,但无法让它工作。Seam 3 和 Glassfish 3.1 之间似乎存在很多兼容性问题。我将 Weld 升级到 1.1.1,但这并没有帮助。从我的角度来看,它目前不起作用。当我说不起作用时,例如,我有一个页面试图将 h:inputText 转换为支持 bean 中的字符串,这不起作用,非常简单的东西。
由于我遇到的 CDI 问题,我无法在一个非常简单的测试应用程序(即使在 g/f 3.1 上)中使用缝面 @RenderScoped,它只是我想要的,但在复杂的主应用程序中却不行。
目前我能找到的唯一可靠的机制是 URL 参数,这是一个安全噩梦。尽管已尽一切努力确保对数据的访问得到正确的身份验证,但总是会丢失某些内容,并且在浏览器中看到 ...xhtml?id=51031 或其他任何内容对于某些人来说太多而无法抗拒尝试其他 ID。我编写了一个混淆转换器来避免使用明文并且不对名称/值对使用有意义的名称,但这并没有解决问题的根源。
我只是想知道我是否在这里遗漏了一些东西,其他人是否有解决这个问题的有效方法,即使是在 glassfish 上?我是否太担心并且应该坚持使用 URL 参数?还有其他建议吗?
谢谢。