2010-06-07 22 views
1

任何人都可以告訴我爲什麼以下不起作用?selectOneMenu提供的EJB更新模型

<h:selectOneMenu value="#{modelosController.selected.idMarca}"> 
    <br/> 
    <f:selectItems value="#{marcasController.itemsAvailableSelectOne}" /> 
    <br/> 
</h:selectOneMenu><br/> 
<h:commandButton action="#{modelosController.createByMarcas}" value="Buscar" /> 

,代碼:

public String createByMarcas() { 
      current = new Modelos(selectedItemIndex, current.getIdMarca()); 
      items =(DataModel)ejbFacade.findByMarcas(); 
      getPagination().getItemsCount(); 
      recreateModel(); 
      return "List"; 
} 

public List<Modelos> findByMarcas(){ 
    CriteriaQuery cq = (CriteriaQuery) em.createNamedQuery(
      "SELECT m FROM Modelos WHERE m.id_marca :id_marca"); 
    cq.select(cq.from(Modelos.class)); 
    return em.createQuery(cq).getResultList(); 
} 

非常感謝您!

+0

什麼不工作?它真的與JSF的EJB有關嗎? – ewernli 2010-06-07 08:30:05

回答

1

當前選擇的項目將被設置爲h:selectOneMenu,換句話說,它將在#{modelosController.selected.idMarca}但在操作方法你抓住和current.getMarcaId()設置這似乎並沒有涉及到彼此。

這裏有一個基本的開球例如如何h:selectOneMenu應該使用:

<h:selectOneMenu value="#{bean.selectedItem}"> 
    <f:selectItems value="#{bean.selectItems}" /> 
</h:selectOneMenu> 
<h:commandButton value="submit" action="#{bean.submit}" /> 

private String selectedItem; // +getter +setter 
private List<SelectItem> selectItems; // +getter 

public Bean() { 
    selectItems = new ArrayList<SelectItem>(); 
    selectItems.add(new SelectItem("value1", "label1")); 
    selectItems.add(new SelectItem("value2", "label2")); 
    selectItems.add(new SelectItem("value3", "label3")); 
    // You can also use SelectItem[] or Map<Object, String> instead. 
} 

public String submit() { 
    // Selected item is already set by JSF. The below line just shows it. 
    System.out.println(selectedItem); // value1, value2 or value3 
    return null; 
} 

selectedItem也可以是Number或任何Object。但最後你需要ConverterObject和標準類型如StringNumber之間進行良好轉換。

+0

乾杯隊友得到它的工作! muchas gracias – 2010-06-09 15:53:29

+0

不客氣:) – BalusC 2010-06-09 15:55:00