实际问题是购物车的实施。在某一点上,购物车可以是SFSB(有状态会话Bean)。这意味着EJB容器将把servlet/Web容器视为客户机,并管理两个容器之间的会话。如果EJB客户机是Servlet/Web容器,那么我如何识别正在向购物车添加项目的最终用户(实际客户机)呢?
我的第二个选项是将SFSB存储到HttpSession
中。这样,最终用户就可以从HttpSession
中检索购物车(并且会话已经从servlet容器中管理)。这将如何影响EJB会话的事务状态?
购物车使用JPA持久化在数据库中。
多谢了。
其实这是一个很好的问题。
我在70%的开发活动中使用了完全相同的堆栈(Java EE 7、Glassfish 4、JSF 2.2、EclipseLink JPA、EJB 3.1)。我经常开发定制的电子商务站点,因此我熟悉购物车的设计。
我遵循的两种方法(在最后决定选择其中一种方法之前):
1)名为shoppingcart.java的接口:
@Remote
public interface ShoppingCart{
public void init(Integer id);
public void addToCart(String product);
}
2)一个名为shoppingcartimpl.java的有状态会话EJB实现shoppingcart.java接口
@Stateful
public class ShoppingCartImpl implements ShoppingCart{
private Integer uid;
private ArrayList<String> products;
@PostConstruct
private void create(){
producs = new ArrayList<String>();
}
@Override
public void init(Integer id){
if(id==null){
uid = id;
}
}
@Override
public void addToCart(String product){
if(product!=null){
products.add(product);
}
}
}
客户端类可以通过@EJB注释使用CDI访问Statefull会话Bean。
public class ShoppingCartClient {
@EJB
private static ShoppingCart cart;
// your methods here, using the ShoppingCart interface
}
物理客户和它的ShoppingCart实现实例的实例之间的实际“链接”得到了保证,因为每个客户端都与一个有状态会话bean的新实例相关联。从客户机的角度来看,业务方法似乎在本地运行,尽管它们在会话bean中远程运行。作为记录,Oracle在他自己的教程中提出了这种方法。
我喜欢的方法
我的首选方法是使用SessionScoped的JSF支持bean来表示代码,并使用无状态EJB来访问所需的业务逻辑。在这种情况下也需要一个接口,但可以将其设置为本地的,以如下方式更改代码:
1)Java本地接口
@Local
public interface ShoppingCart{
public void doSomething(List<Product> list);
}
2)无状态EJB
@Stateless
public class ShoppingCartImpl implements ShoppingCart{
@Override
public void doSomething(List<Product> list){
// persistence, tax calculation, etc
}
}
3)JSF会话范围Bean
@ManagedBean
@SessionScoped
public class CartBean {
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;
}
}
购物车 手淘iOS 5.2.5 Android 5.2.7,天猫客户端暂未支持 Tida.cart({ sellerNick: "莱夫箱包旗舰店", itemId: "42828909348", skuId: "73068526031" }, function (data) { alert(JSON.stringify(data)); }); 该接口支持SPI回
购物车类允许项目被添加到session中,session在用户浏览你的网站期间都保持有效状态。这些项目能够以标准的 "购物车" 格式被检索和显示,并允许用户更新数量或者从购物车中移除项目。 请注意购物车类只提供核心的"购物车"功能。它不提供配送、信用卡授权或者其它处理组件。 初始化购物车类 重要:购物车类利用 CodeIgniter 的 Session 类把购物车信息保存到数据库中,所以在使用购物
购物车类允许项目被添加到 session 中,session 在用户浏览你的网站期间都保持有效状态。 这些项目能够以标准的 "购物车" 格式被检索和显示,并允许用户更新数量或者从购物车中移除项目。 重要 购物车类已经废弃,请不要使用。目前保留它只是为了向前兼容。 请注意购物车类只提供核心的 "购物车" 功能。它不提供配送、信用卡授权或者其它处理组件。 使用购物车类 初始化购物车类 将一个项目添加到
问题内容: 我有上面的代码。 如果我在cart_item上运行print_r,我将得到一个多维数组: 我如何只获得product_id? 我试过$ test = 没用 问题答案: 要获取 foreach循环中的每个购物车商品(对于简单产品): 如果是可变产品,请获取 : 或在两种情况下 ( Woocommerce 3+中 的 Object在哪里) : 更新: 循环外使用产品ID 1)打破循环 (仅
最初,我选择了一个包(Woo订阅) 然后添加了所有详细信息。 但未提交。 回到网站,所以再次购买我需要选择一个包。所以我选择了这个包,并填写了详细信息,然后转到付款包。 现在在我的购物车中,两个包都存在(即我没有第一次购买就选择的包和最近的包) 如何修复此问题,使最新选定的一个在购物车中,而较早的一个在选定最新的一个后立即删除。 我尝试了这个Woocommerce从购物车中删除所有产品,并将当前产
我试图从以下链接实现这个购物车示例http://o7planning.org/en/10605/create-a-java-shopping-cart-web-application-using-spring-mvc-and-hibernate 我使用了与它相同的代码。但我得到了以下错误。 有人能帮我解决这个吗?