0

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

这是我的 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 意味着我只想要实际产品的名称。

4

1 回答 1

1

您还必须包括itemLabel

<f:selectItems value="#{productBean.products}" var="c" itemValue="#{c.name}" itemLabel="#{c.name}" />
于 2013-05-11T12:16:58.970 回答