我正在使用在线商店项目。目前我正试图增加将产品添加到购物车的可能性,无论用户是否登录。我正在使用会话bean方法来做到这一点。
@Inject ShoppingCartSessionBean shoppingCartSessionBean;
@POST
public boolean addToCart(@PathParam("productid") int newProductId, @PathParam("qu") int newProductQuantity) {
shoppingCartSessionBean.setCartItems(newProductId);
shoppingCartSessionBean.setProductQuantity(newProductQuantity);
return true;
}
我想在哈希映射中存储id。但是,目前我只能为我的setter方法设置一个id。
@Stateful
@SessionScoped
public class ShoppingCartSessionBean implements Serializable{
HashMap<Integer, Integer> newmap = new HashMap<Integer, Integer>();
public int addToHashMap() {
return array of productId's.
}
private static final long serialVersionUID = -5024959800049014671L;
private int productId;
private int productQuantity;
//getters and setters
Map<Integer, ShoppingCartSessionBean> hm = new HashMap<Integer, ShoppingCartSessionBean>();
稍后我使用实体管理器检查设置了哪个ID / id,并将有关该id的所有信息发回给用户。由于空间问题,我没有将所有值存储在会话bean中。
Query q = em.createQuery("SELECT c FROM Items c WHERE c.productId = :itemid");
q.setParameter("itemid", shoppingCartSessionBean.addToHashMap());
所以我有几个问题:
将这些信息存储在哈希映射中是不错的选择?或者我应该使用cookies吗?
我的addToHashmap方法应如何在哈希映射中存储多个id? (我尝试使用我的实体管理器打印出简单的int [] array = {123,456},但是我收到了JSON错误...)。
从哈希映射中删除/取消设置此类信息的最佳方法是什么?
我希望我的信息很清楚,如果你遗失了什么 - 现在就让我吧。
答案 0 :(得分:0)
第2点和第3点。您需要检查是否存在哈希冲突,在正面情况下您需要对其进行处理。看下面的代码。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class HashMapTest {
private static HashMap<String, List<String>> map = new HashMap<String, List<String>>();
public static void insert(String key, String value){
List<String> list = map.get(key);
if (list == null){
list = new ArrayList<String>();
map.put(key, list);
}
list.add(value);
}
public static void main(String[] args){
insert("10", "V1");
insert("10", "V2");
insert("20", "V3");
insert("20", "V4");
insert("30", "V5");
List<String> values10 = map.get("10");
System.out.println(values10);
List<String> values20 = map.get("20");
System.out.println(values20);
List<String> values30 = map.get("30");
System.out.println(values30);
}
}