1

I'm trying to build shopping cart in jsf. I'm using jstl to read data from data base(works fine), the problem is when i send my var(p in this case) to function in shoppingCartController that is @ManagedBean - i got wired error, if the function called without the var everything wotk just fine.

the xhtml page:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:c="http://java.sun.com/jsp/jstl/core"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets">
    <h:head>
        
        <link href="bootstrap/css/bootstrap.css" rel="stylesheet" type="text/css"></link>
        <h:outputStylesheet name="homeStyle.css" library="css" />      
        <h:outputScript name="homeJS.js" library="js" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
                         
        <title>necklaces</title>
    </h:head>
    <h:body>
       <div class="main-div">
         <div class="topnav" id="myTopnav">
                <a href="homePage.xhtml" class="active">Home</a>
                <a href="#news">Sales</a>
                <a href="#contact">Contact</a>
                
                  <div class="dropdown">
                    <button class="dropbtn">Categories
                        <i class="fa fa-caret-down"></i>
                    </button>
                    <div class="dropdown-content">
                        <a href="necklaces.xhtml">necklaces</a>
                        <a href="#">bracelets</a>
                        <a href="#">rings</a>
                        <a href="#">earrings</a>
                    </div>
                </div>
    
                <h:outputLink rendered="#{userLogIn1.logged == false}" value="index.xhtml">Login</h:outputLink>
                <a href="cart.xhtml">Cart</a>
                <h:outputLink rendered="#{userLogIn1.logged != false}" value="logOut.xhtml">Logout</h:outputLink>
                <a href="javascript:void(0);" class="icon" onclick="myFunction()">&#9776;</a>
        </div>
      
      <div class="sec1">   
            <hr></hr>
            <h2>Necklaces</h2>
            <hr></hr>
        </div>  
      <div class="wrapper">
      
            <div class = "row container-fluid">
            <c:forEach items="#{productController.findAll()}" var="p" >

                <div class="col-lg-4 product">
                    <h:graphicImage value="#{p.imgPath}" height="150" width="150"/>
                    <br></br>
                    <h:outputText value=" #{p.description}"/>
                    <br></br>
                    <h:outputText value="₪ #{p.price}"/>
                    <h:form>
                    <h:commandButton class="btn btn-success" id="AddToCart" value="add to cart" action="#{shoppingCartController.orderNecklace(p)}" />
                    </h:form>   
                </div>       
            </c:forEach>
        </div>
      </div>
        
   </div>
 </h:body>      
    
</html>  

the problem in this line:

    <h:commandButton class="btn btn-success" id="AddToCart" value="add to cart" action="#{shoppingCartController.orderNecklace(p)}" />



  the error i get from this line:


    Method must have signature "String method(), String method(), String method(String), String method(String, 
     String), String method(String, String, String), String method(String, String, String, String), String method(String, 
     String, String, String, String), String method(String, String, String, String, String, String), String method(String, String, 
     String, String, String, String, String), String method(String, String, String, String, String, String, String, String), String 
     method(String, String, String, String, String, String, String, String, String), String method(String, String, String, String, 
     String, String, String, String, String, String), String method(String, String, String, String, String, String, String, String, 
     String, String, String), String method(String, String, String, String, String, String, String, String, String, String, String, 
     String), String method(String, String, String, String, String, String, String, String, String, String, String, String, String), 
     String method(String, String, String, String, String, String, String, String, String, String, String, String, String, String), 
     String method(String, String, String, String, String, String, String, String, String, String, String, String, String, String, 
     String), String method(String, String, String, String, String, String, String, String, String, String, String, String, String, 
     String, String, String), String method(String, String, String, String, String, String, String, String, String, String, String, 
     String, String, String, String, String, String), String method(String, String, String, String, String, String, String, String, 
     String, String, String, String, String, String, String, String, String, String), String method(String, String, String, String, 
     String, String, String, String, String, String, String, String, String, String, String, String, String, String, String)" but has 
     signature "String method(Product)"


this is the ShoppingCartController.java class:

    package controller;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import javax.faces.bean.ManagedBean;
    import javax.faces.bean.SessionScoped;
    
    import model.ProductModel;
    import entities.Item;
    import entities.Product;
    
    @ManagedBean(name="shoppingCartController")
    @SessionScoped
    public class ShoppingCartController {
    
    private ProductModel nm = new ProductModel();
    
    private List<Item> cart = new ArrayList<Item>();
        
        public String orderNecklace(Product n){
            Item temp = new Item(n,nm.getCurrentUser().getName(),1);
            this.cart.add(temp);
            return "cart";
        }
    
        public List<Item> getCart() {
            return cart;
        }
    
        public void setCart(List<Item> cart) {
            this.cart = cart;
        }
        
    }

Like i already mentioend the problem is when i passing the p as a parameter to the orderNecklace function inside ShoppingCartController.

any idea what could couse that?
thanks
BalusC
  • 1,082,665
  • 372
  • 3,610
  • 3,555
Gal Lisha
  • 51
  • 1

0 Answers0