struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Hanen Ben Rhouma <hanen...@gmail.com>
Subject No getter method for property: "productName" of bean: "product"
Date Wed, 14 Oct 2009 15:17:46 GMT
Hello,

Please I have a problem to which I'm stuck since this morning: I am trying
to render the product list in a jsp page included into a struts 1.3.8
application and when iterating on the product entity parameters I get this
exception:

No getter method for property: "productName" of bean: "product"

*
Here is my Product Class:*

import com.perforce.api.CommitException;
import com.perforce.api.DirEntry;
import com.perforce.api.Env;
import com.perforce.api.HashDecay;
import com.perforce.api.PerforceException;
import com.perforce.api.SourceControlObject;
import java.util.ArrayList;

/**
 *
 * @author hbenrhouma
 */
public final class Product extends SourceControlObject {

    private String id = "";
    private String productname = "";
    private static HashDecay products = null;

    /**
     * Default no-argument constructor.
     */
    public Product() {
        super();
        getCache();
    }

    /**
     * Constructor that accepts the id of the product. This simply creates
an
     * instance that has the id set. No other information in the class will
be
     * present until the <a href="#sync()">sync() method is called.
     *
     * @param id  Id for the product.
     */
    public Product(String id) {
        this();
        this.id = id;
    }

    private static HashDecay setCache() {
        if (null == products) {
            products = new HashDecay(600000);
            products.start();
        }
        return products;
    }

    public HashDecay getCache() {
        return setCache();
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getProductName() {
        return productname;
    }

    public void setProductName(String productname) {
        this.productname = productname;
    }

    public static HashDecay getProducts() {
        return products;
    }

    public static void setProducts(HashDecay products) {
        Product.products = products;
    }

    /**
     * Returns an <code>Enumeration</code> of all <code>Product</code>
objects.
     */
    public static synchronized ArrayList getProducts(Env env) throws
Exception {

        ArrayList<String> nodes = new ArrayList<String>();
         try {
            DirEntry dir = new DirEntry(env, "//depot/*");
            String[] dirs = dir.getDirNames();
            for (int i = 0; i < dirs.length; i++) {
                nodes.add(dirs[i]);
            }

        } catch (Exception ex) {
            throw new Exception("getProducts couldn't be successfully
executed");
        }

        return nodes;
    }

    @Override
    public void commit() throws CommitException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void sync() throws PerforceException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public String toXML() {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}


*Here is the ProductListForm *

import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;

/**
 * Creation date: 14-10-2009
 *
 * @struts.form name="productListForm"
 */
public class ProductListForm extends ActionForm {

   private ArrayList products;

    public ArrayList getProducts() {
        return products;
    }

    public void setProducts(ArrayList products) {
        this.products = products;
    }

        /* 14.10.2009
     * reset the collection products
     */
    @Override
         public void reset(ActionMapping arg0, HttpServletRequest arg1) {
            products = new ArrayList();
         }

    /**
     * Method validate
     * @param mapping
     * @param request
     * @return ActionErrors
     */
    @Override
    public ActionErrors validate(ActionMapping mapping,
            HttpServletRequest request) {
        return null;
    }
}


*Here is my ProductListAction*

/**
 * Creation date: 14-10-2009
 *
 *
 * @struts.action path="/productList" name="productListForm" scope="request"
 *                validate="true"
 * @struts.action-forward name="showProductList" path="/jsp/productList.jsp"
 */
public class ProductListAction extends Action {

    /**
     * Method execute
     *
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return ActionForward
     */
    @Override
    @SuppressWarnings("static-access")
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) throws
PerforceException {
        ProductListForm productListForm = (ProductListForm) form;

        /*
         * 14.10.2009 load the session facade and get all products
         */
        try {
            productListForm.setProducts(Product.getProducts((Env)
request.getSession().getAttribute("env")));
        } catch (Exception ex) {
            throw new PerforceException("Error while trying to execute
productListForm.getProducts method");
            //return mapping.findForward(FAILURE);
        }
        return mapping.findForward("showProductList");
    }
}

*And last here is **productList.jsp*

<%@ page language="java"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%>

<html>
    <head>
        <title>Show Product List</title>
    </head>
    <body bgcolor="#FFFFFF" marginheight="0" marginwidth="0" topmargin="0"
leftmargin="0">
        <center>
            <TABLE cellspacing="0" cellpadding="0" border="0">
                <table border="1">
                    <tbody>
                        <%-- set the header --%>
                        <tr>
                            <td>
                                <b>Products</b>
                            </td>

                        </tr>
                        <%-- start with an iterate over the collection
products --%>
                        <logic:iterate name="productListForm"
property="products" id="product">
                            <tr>
                                <%-- product informations --%>
                                <td>
                                    <bean:write name="product"
property="productName" />
                                </td>

                            </tr>
                        </logic:iterate>
                        <%-- end interate --%>

                        <%-- if products cannot be found display a text --%>
                        <logic:notPresent name="product">
                            <tr>
                                <td colspan="5">
                            No products found.
                                </td>
                            </tr>
                        </logic:notPresent>

                    </tbody>
                </table>
                <br>
        </center>
    </body>
</html>

Please, do you have any idea about what's written wrong here?


Thanks in advance,
Hanen

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message