gla*_*ill 6 ejb javabeans jsf-2 managed-bean
我需要一种方法来保存由不同部分组成的用户选择的配置.每个部分都在一个单独的页面上从托管bean提供的列表中选择(每个部件类型一个).
现在是有趣的部分.我有一个数据表,总是可见的,对于我<ui:include>在所有上述页面的模板中插入的所有页面都是相同的.我希望这个数据表能够反映用户为部件做出的选择或更改.也许将这样的配置保存到数据库中,但现在这不是我的优先事项.它是一种购物车,但我没有不同的用户(它只是一个原型),因此无需登录.
这是我第一次遇到javaee,jsf,ejb,我不知道哪种方法最好.我已经阅读了不同的选项,我觉得无论哪种方式都可行,所以我可能会遗漏一些东西.
我希望有人指出我正确的方向.
Bal*_*usC 11
您可以使用会话范围的托管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在那里存储会话范围的托管bean无关,并且您不希望将原始Servlet API从JSF的外壳公开到外部.
| 归档时间: | 
 | 
| 查看次数: | 2143 次 | 
| 最近记录: |