2011-01-25 74 views
0

我在netbeans中创建了entites和facde。现在我想创建一个本地查询来从表中只获取两个实体。然后将它们绑定到如何将两个值链接到JSF下拉菜单中?

String query = "SELECT DISTINCT(m.idManufacturer),m.hmid " 
       + " FROM model m"; 

@SuppressWarnings("unchecked") 
List<model> modelList = (List&lt;model>) getEntityManager().createNativeQuery(query).getResultList(); 

,然后我用这个代码

<f:selectItems itemLabel="#{myController.modelList.idManufacturer}"/> 

显示在下拉列表值。但这似乎并不奏效。有任何想法吗?

回答

0

尝试从您的List<Model>创建selectItems的列表,并给出该值的属性。

例如

List<SelectItem> modelList = new ArrayList<SelectItem>(); 
    //implement your conversion label value here. 
<f:selectItems value="#{myController.modelList}"/> 
0

如果你在JSF 1.x中,您需要提供一个SelectItem[]List<SelectItem>Map<String, Object>f:selectItemsvalue。最常见的选择是List<SelectItem>。假设你想使用Model#getIdManfacturer()(我假设是一个Long)既项标签值,这里有一个例子:

public class Bean { 
    private Long selectedManfacturerId; // +getter +setter 
    private List<SelectItem> selectManfacturerIds; // +getter 

    @PostConstruct 
    public void init() { 
     selectManfacturerIds = new ArrayList<SelectItem>(); 
     List<Manfacturer> manfacturers = getItFromDatabaseSomehow(); 
     for (Manfacturer manfacturer : manfacturers) { 
      selectManfacturerIds.add(new SelectItem(manfacturer.getManfacturerId())); 
     } 
    } 

    // ... 
} 

结合

<h:selectOneMenu value="#{bean.selectedManfacturerId}"> 
    <f:selectItems value="#{bean.selectManfacturerIds}" /> 
</h:selectOneMenu> 

然而,如果您已经使用JSF 2.0,那么您也可以使用List<SomeBean>。 JSF 2.0 <f:selectItems>中新的var属性允许您在视图中声明迭代项目。开球例如:

public class Bean { 
    private Long selectedManfacturerId; // +getter +setter 
    private List<Manfacturer> manfacturers; // +getter 

    @PostConstruct 
    public void init() { 
     manfacturers = getItFromDatabaseSomehow(); 
    } 

    // ... 
} 

结合

<h:selectOneMenu value="#{bean.selectedManfacturerId}"> 
    <f:selectItems value="#{bean.manfacturers}" var="manfacturer" itemValue="#{manfacturer.manfacturerId}" /> 
</h:selectOneMenu>