2013-05-11 96 views
0

我知道,类似的问题在这里宣布几次,但我花了大量的时间和仍然不知道为什么码不起作用:/JSF 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是一个完整的产品列表,并且c.name表示我只想从实际产品中命名。

回答

0

您还必须包括itemLabel

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

耶稣,那是如此简单。我尝试了一切,但这个。谢谢 – 2013-05-11 13:13:08

+0

很高兴帮助! – 2013-05-12 18:43:20