2015-08-02 4 views
0

- Я разрабатываю приложение электронной коммерции Java EE с использованием WildFly 9.0 PostGresql, JSF, управляемых bean-компонентов, сущностей и т. Д. На IntelliJ. - пользователь может нажать на категорию, а продукты, относящиеся к этой категории, отображаются в сетке PrimeFaces. - Выбранный продукт и его количество могут быть добавлены в список в ShoppingCartBean.java (CopyOnWriteArrayList cartItemList;) - Этот экземпляр bean-компонента вводится (с использованием @EJB) в CartFacade.java, который вводится управляемому компоненту. - Нет зарегистрированных ошибок, система не разбивается на развёртывание, добавляет выбранный продукт в файл cartItemList. - Когда вызывается ViewCart.xhtml, аррайалист сбрасывается на пустой. Я пытался разрешить это в течение трех дней. Пожалуйста, помогите кому-нибудь. ThanksКорзина пуста

Вот код. Первый: ShoppingCartBean.Java (импорт удален для краткости). Это реализует удаленный интерфейс и локальный интерфейс.

@Stateful(name="ShoppingCart") 
public class ShoppingCartBean implements ShoppingCart, ShoppingCartLocal { 

@PersistenceContext(unitName ="Shop", type=PersistenceContextType.EXTENDED) 


    private EntityManager cartEntityManager; 
    private CustomerManager customerManagerBean; 
    private CopyOnWriteArrayList<Orderitem> cartItems = new CopyOnWriteArrayList<>(); 
    private CustomerEntity customer=null; 


    public ShoppingCartBean(){} 


    @PostConstruct 
    private void initialize(){ 

    } 


    @Override 
    public boolean addCartItem(ProductEntity product, int quantityPurchased){ 
     com.shop.entity.Orderitem basketItem=new Orderitem(); 
     Locale currentLocale = new Locale("en", "GB"); 
     double subTotal; 
     Boolean returnVal=false; 

     if(cartItems.size()!=0) { 
      // check for duplicate entry. 
      for (Orderitem itemsIntheCart : cartItems) { 
       if (itemsIntheCart.getItemcode().equals(product.getItemcode())) { 
        returnVal = false; 
       } 
      } 
     } 
     // now that we're sure that the item doesn't already exist in the basket 
     // lets add the Orderitem to the cart 
     basketItem.setItemcode(product.getItemcode()); 
     basketItem.setItemdescription(product.getItemdescription()); 
     basketItem.setUnitprice(product.getUnitprice()); 
     basketItem.setQuantitypurchased(quantityPurchased); 
     subTotal=quantityPurchased*basketItem.getUnitprice(); 
     Double currencyAmount = new Double(subTotal); 
     NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance(currentLocale); 
     currencyFormatter.format(currencyAmount); 
     basketItem.setSubtotal(currencyAmount); 

     synchronized (cartItems) { 
      cartItems.add(basketItem); 
     } 
     //syncCart = java.util.Collections.synchronizedList(cart); 
     System.out.println("just added an item to cartitemslIst " + cartItems.size()); 


     if(cartItems!=null){ 
      returnVal= true; 
     } 

     return returnVal; 
    } 


@Override 
    public List<Orderitem> viewCartItems(){ 
     return getCartItems(); 
    } 
/***********This method is accessed by the CartFacade.java See below*****/ 
    @Override 
    public List<Orderitem> getCartItems(){ 
     CopyOnWriteArrayList<Orderitem> cartItemList;// = new CopyOnWriteArrayList<Orderitem>(); 
     cartItemList= this.cartItems; 
     System.out.println("inside get cart items " + this.cartItems.size()); // this returns zero!!!! 
     return cartItemList; 
    } 
/***********************end of offending method**********************/ 
} 

тогда телега Фасад

Stateful(name="ShoppingCartLocal") 
@SessionScoped 
public class CartFacade { 
    private CopyOnWriteArrayList<Orderitem>myCartList ; 
    @PersistenceContext(unitName ="Shop") 
    EntityManager cartEntityManager; 

    @EJB 
    ShoppingCart cartBean;//= new ShoppingCartBean(); 

    public CartFacade(){} 

    //public void assignCustomerToCart(CustomerEntity customer){ 
     //cartBean.setCustomer(customer); 
    //} 

    public boolean addItemToCart(ProductEntity product, int quantityPurchased){ 
     boolean result = false; 
     result=cartBean.addCartItem(product, quantityPurchased); 
     System.out.println("Result from cart facade " + result); 
     return result; 
    } 
    public List<Orderitem> viewItemsIntheCart(){ 
     CopyOnWriteArrayList<Orderitem> myCartList; 
     //this stops the inner cart from getting returned to the front 
     myCartList= (CopyOnWriteArrayList<Orderitem>) cartBean.getCartItems(); 
     return myCartList; 
    } 

затем внутри Managed Bean

@ManagedBean(name="ViewCartManagedBean") 
@SessionScoped 
public class ViewCartManagedBean { 
    CopyOnWriteArrayList<Orderitem> cartItemsList = new CopyOnWriteArrayList<Orderitem>(); 
    @EJB 
    com.shop.cart.CartFacade cartFacade; 
    private double cartTotal; 
    public double getCartTotal() { 
     return cartTotal; 
    } 


    public ViewCartManagedBean(){} 

    @PostConstruct 
    public void initialize(){ 
     setCartItemsList(); 
    } 
    public List<Orderitem> getCartItemsList() { 
     //setCartItemsList(); 
     return cartItemsList; 
    } 

    public void setCartItemsList() { 
     cartItemsList=null; 
     cartItemsList = (CopyOnWriteArrayList<Orderitem>) cartFacade.viewItemsIntheCart(); 
    } 

Наконец страница XHTML (ViewCart.xhtml)

<body> 
<h:outputText value="Cart List" 
       style="font-family: Verdana, Helvetica, sans-serif;font-size: 18px; font-weight: 900;" /> 
<h:form name="ViewCartManagedBean"> 

    <h:dataTable var="cartList" 
       value="#{ViewCartManagedBean.cartItemsList}" styleClass="order-table" 
       headerClass="order-table-header" 
       rowClasses="order-table-odd-row,order-table-even-row"> 
     <h:column> 
      <f:facet name="header"> 
       <h:outputText value="Item Code" 
           style="font-family: Verdana, Helvetica, sans-serif;font-size: 16px;" /> 
      </f:facet> 
      <h:outputText value="#{cartList.itemcode}" 
          style="font-family: Verdana, Helvetica, sans-serif;font-size: 14px;" /> 
     </h:column> 
     <h:column> 
      <f:facet name="header"> 
       <h:outputText value="Description" 
           style="font-family: Verdana, Helvetica, sans-serif;font-size: 16px;" /> 
      </f:facet> 
      <h:outputText value="#{cartList.itemdescription}" 
          style="font-family: Verdana, Helvetica, sans-serif;font-size: 14px;" /> 
     </h:column> 
     <h:column> 
      <f:facet name="header"> 
       <h:outputText value="Quanitity" 
           style="font-family: Verdana, Helvetica, sans-serif;font-size: 16px;" /> 
      </f:facet> 
      <h:outputText value="#{cartList.quantitypurchased}" 
          style="font-family: Verdana, Helvetica, sans-serif;font-size: 14px;" /> 
     </h:column> 
     <h:column> 
      <f:facet name="header"> 
       <h:outputText value="Unit Price" 
           style="font-family: Verdana, Helvetica, sans-serif;font-size: 16px;" /> 
      </f:facet> 
      <h:outputText value="#{cartList.unitprice}" 
          style="font-family: Verdana, Helvetica, sans-serif;font-size: 14px;"> 
       <f:convertNumber currencySymbol="£" groupingUsed="true" 
           maxFractionDigits="2" type="currency" /> 
      </h:outputText> 
     </h:column> 
     <h:column> 
      <f:facet name="header"> 
       <h:outputText value="Sub Total" 
           style="font-family: Verdana, Helvetica, sans-serif;font-size: 16px;" /> 
      </f:facet> 
      <h:outputText value="#{cartList.subtotal}" 
          style="font-family: Verdana, Helvetica, sans-serif;font-size: 14px;" 
          converter="javax.faces.BigDecimal"> 
       <f:convertNumber currencySymbol="£" groupingUsed="true" 
           maxFractionDigits="2" type="currency" /> 
      </h:outputText> 
     </h:column> 
    </h:dataTable> 
    <f:facet name="header"> 
     <h:outputText value="Grand Total" 
         style="font-family: Verdana, Helvetica, sans-serif;font-size: 16px;" /> 
    </f:facet> 
    <h:outputText value="#{ViewCartManagedBean.cartTotal}" 
        style="font-family: Verdana, Helvetica, sans-serif;font-size: 14px;" 
        converter="javax.faces.BigDecimal"> 
     <f:convertNumber currencySymbol="£" groupingUsed="true" 
         maxFractionDigits="2" type="currency" /> 
    </h:outputText> 
</h:form> 
<h:link value="Continue Shopping" outcome="Products" /> 
</body> 
+0

Hi BalusC. Спасибо, его импорт javax.faces.bean.SessionScoped; –

ответ

0

Вы используете удаленный фасоль? Если бы я не избавился от ваших аннотаций Stateful и просто использовал javax.enterprise.context.SessionScoped как для фасоли, так и для фасад.

+0

HI Терренс, спасибо за ваш ответ. Импорт не идентифицируется в IntelliJ 14 Ultimate, хотя библиотека Java EE 6 находится в папке с библиотеками. Любые другие идеи, пожалуйста .. –

+0

Хмм. Я не знаю, почему импорт не будет работать. У меня есть проект с использованием @SessionScoped, который я знаю, работает в IntelliJ. Возможно, посмотрите мой файл pom.xml и посмотрите, как он сравнивается с вашим? https://github.com/teacurran/java-experiments/tree/master/session-clustering-test – teacurran

Смежные вопросы