2011-01-25 32 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>