JSF selectOneMenu与Object迭代

时间:2013-05-11 12:12:43

标签: jsf object populate selectonemenu

我知道这里几次宣布类似的问题,但我花了很多时间,仍然不知道为什么代码不起作用:/

这是我的JSF页面:

<h:form>
<h:selectOneMenu value="#{productBean.productName}">
    <f:selectItems value="#{productBean.products}" var="c" itemValue="#{c.name}"/>
</h:selectOneMenu>
</h:form>

这是我的productBean:

public class ProductBean extends Connector
{
    private List<Product> products;
    private Product product;
    private String productName;
    //setters and getters
    public List<Product> getProducts() throws SQLException
    {
        resultSet = statement.executeQuery("SELECT * FROM dbo.products");
        products = new ArrayList<Product>();
        while(resultSet.next())
        {
            product = new Product();
            product.setId_product(resultSet.getInt("id_product"));
            product.setName(resultSet.getString("name"));
            product.setCategory(resultSet.getInt("category_id"));
            product.setIs_available(resultSet.getInt("is_available"));
            products.add(product);
        }
        return products;
    }
}

最后是产品类:

public class Product 
{
    private int id_product;
    private String name;
    private int price;
    private int category;
    private int is_available;
    /setters and getters
}

我的目标是拥有一个包含产品名称的菜单列表。我在扩展列表中得到的只是参考。 我还尝试在bean类中声明所有内容并使ArrayList而不是ArrayList,但我认为它并不好。无论如何它都没有用。

告诉我,如果我理解它。 productBean.productName是某种持有者。 productBean.products是一个完整的Products列表,c.name表示我只想要实际产品的名称。

1 个答案:

答案 0 :(得分:0)

您还必须包含itemLabel

<f:selectItems value="#{productBean.products}" var="c" itemValue="#{c.name}" itemLabel="#{c.name}" />