【发布时间】:2016-01-23 20:22:36
【问题描述】:
我有一个网上商店应用程序。我想改进“从购物车中删除”功能。我不想问用户是否想从购物车中“真正删除”该位置,而是我想允许他取消操作。
目前当用户点击购物车中产品的“X”按钮时,表格行变为“已移除,点击取消”。在后面有一个CartPosition 对象列表,每个对象都带有标志removed。删除的产品仍在列表中,但标志设置为 true。它使产品在列表中的适当位置仍然可见,但在视图方面我可以用另一种方式呈现它。当用户点击另一个“X”时,前一个会被预先从列表中删除,新的会被标记为removed。
购物车的会话范围为CDI bean。这意味着,当我标记某个位置removed 并去其他地方,然后回到购物车时,我仍然会有一行标记为removed。我只是不想要这个。
我考虑将 bean 更改为 JSF 的,然后创建另一个视图范围,它可以保留标记为 removed 的记录并检查它是否为空,如果是,我可以从列表中删除它。我不知道它是否会起作用。我会尝试这种方法,但我宁愿让我的 bean 由CDI 管理。
有没有办法在不实现我上面的想法的情况下处理这个问题?
编辑: @BalusC,你的假设是错误的。您应该假设,我不完全知道如何混合 CDI 和 JSF。我实际上使用的是 JSF 2.2,这意味着我可以使用 javax.faces.view.ViewScoped 注释。无论如何,我仍然不明白这个想法。我明白,我必须依赖一些ViewScoped bean。很清楚,但它必须如何组合。你能解释一下你的想法吗?我尝试了几件事,但看起来它无法正常工作。例如,我的 ViewScoped bean 的 @PreDestroy 方法从未被调用过,只有在我尝试使用它时才会懒惰地构造它。
【问题讨论】:
标签: jsf jsf-2 cdi shopping-cart