我需要一种方法来保存由不同部分组成的用户选择的配置。每个部件都是在一个单独的页面上从一个托管bean提供的列表中选择的(每个部件类型一个)。
现在是有趣的部分。我有一个数据表,总是可见的,相同的所有页面,我与<ui:include>
在模板中插入的所有上述页面。我希望这个数据表能够反映用户对部件所做的选择或更改。也许可以将这样的配置保存到数据库中,但这不是我现在的首要任务。它有点像购物车,但我没有不同的用户(它只是一个原型),所以不需要登录。
这是我第一次接触javaee, jsf, ejb,我不知道哪个是最好的方法。我已经阅读了不同的选择,我觉得两种方法都可以,所以我可能错过了什么。
如果有人给我指指方向,我会很感激的。
您可以使用一个会话作用域的托管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>
有状态EJB只有在您希望能够通过不同的api/框架甚至远程客户端在web应用程序的其他地方使用它时才有意义,或者当您希望使用持久性上下文来锁定当前在购物车中的项目时,以便其他客户无法将其添加到购物车中。HttpSession
是不相关的,因为JSF在那里存储会话作用域的托管bean,无论如何,您不想从JSF的掩护下向外部公开原始Servlet API。