gpt4 book ai didi

jsf-2 - session 范围的托管 bean vs 有状态 bean vs httpsession

转载 作者:行者123 更新时间:2023-12-04 13:53:54 24 4
gpt4 key购买 nike

我需要一种方法来保存由不同部分组成的用户选择的配置。每个部分都是在一个单独的页面上从托管 bean 提供的列表中选择的(每个部分类型一个)。

现在有趣的部分。我有一个数据表,始终可见,对于我使用 <ui:include> 插入的所有页面都是相同的在所有上述页面的模板中。我希望这个数据表能够反射(reflect)用户对零件的选择或更改。也许也将这样的配置保存到数据库中,但这不是我现在的优先事项。它有点像购物车,但我没有不同的用户(它只是一个原型(prototype)),所以不需要登录。

这是我第一次遇到 javaee、jsf、ejb,我不知道哪个是最好的方法。我已经阅读了不同的选项,我觉得任何一种方式都可以,所以我可能会遗漏一些东西。

我会很感激有人指出我正确的方向。

最佳答案

您可以使用 session 范围的托管 bean 来保存购物车信息。这是一个基本的启动示例(重复的产品和数量不计;这只是为了给出总体思路):

@ManagedBean
@SessionScoped
public class Cart {

private List<Product> products = new ArrayList<Product>();

public void add(Product product) {
products.add(product);
}

public void remove(Product product) {
products.remove(product);
}

public List<Product> getProducts() {
return products;
}

}

(您可以使用 Map<Product, Integer>Map<Product, Order> 来跟踪数量)

然后,您可以按如下方式显示购物车:
<h:dataTable value="#{cart.products}" var="product">
<h:column>#{product.description}</h:column>
<h:column><h:commandButton value="Remove" action="#{cart.remove(product)}" /></h:column>
</h:dataTable>

您可以将产品从另一个表添加到购物车,如下所示:
<h:dataTable value="#{products.list}" var="product">
<h:column>#{product.description}</h:column>
<h:column><h:commandButton value="Add" action="#{cart.add(product)}" /></h:column>
</h:dataTable>

只有当您希望能够通过不同的 API/框架甚至在远程客户端中在 webapp 的其他地方使用它时,或者当您想利用持久性上下文来锁定当前在购物车中的项目时,有状态的 EJB 才有意义,所以其他客户无法将其添加到购物车。 HttpSession不相关,因为 JSF 在那里存储 session 范围的托管 bean,并且您不想将原始 Servlet API 从 JSF 的掩护下暴露给外部。

关于jsf-2 - session 范围的托管 bean vs 有状态 bean vs httpsession,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8153213/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com