我正在使用带有购物车样式流程的 JSF 开发一个 Java EE Web 应用程序,因此我想收集多个页面上的用户输入,然后对其进行处理。
我正在考虑为此使用 EJB 3 有状态会话 bean,但我的研究使我相信 SFSB 不绑定到客户端的 http 会话,因此我必须通过 httpSession 手动跟踪它,一些附带问题这里 。. .
1)为什么称为会话bean,据我所知,它与会话无关,我可以通过将pojo存储在会话中来实现相同的目的。
2)能够注入它有什么意义,如果我要注入的只是这个SFSB的一个新实例,那么我还不如使用pojo?
所以回到我看到的主要问题,JSF 是一种表示技术,所以它不应该用于逻辑,但它似乎是收集用户输入的完美选择。
我可以将 JSF 会话范围 bean 设置为我的所有请求 bean 的托管属性,这意味着它被注入到它们中,但与 SFSB 不同的是,JSF 托管会话范围 bean 绑定到 http 会话,因此始终注入相同的实例只要 http 会话没有失效。
所以我有多层
第一层)处理表示的 JSF 管理的请求范围 bean,每页 1 个。
第 2 层)一个 JSF 管理的会话范围 bean,其值由请求 bean 在其中设置。
第三层)一个无状态会话 EJB,它对 JSF 会话范围 bean 中的数据执行逻辑。
为什么这么糟糕?
另一种选择是使用 SFSB,但是我必须将它注入到我的初始请求 bean 中,然后将其存储在 http 会话中并在每个后续请求 bean 中重新获取它 - 看起来很混乱。
或者我可以将所有内容都存储在会话中,但这并不理想,因为它涉及使用文字键和强制转换。等..等容易出错。. . 和凌乱!
任何想法都值得赞赏,我觉得我正在与这项技术作斗争而不是使用它。
谢谢