2011-01-13 115 views
1

嗨: 我正在開發一個jsf項目,我正在努力讓selectOneMenu工作。jsf selectonemenu錯誤

<h:selectOneMenu value="#{employeeEditBean.employeeBean}"> 
     <f:selectItems value="#{employeeEditBean.branchList}" /> 
    </h:selectOneMenu> 
public class EmployeeEditHandler 
{ 
private String paramEmPK; 
private Employee employeeBean; 
private List<Branch> branchList; 

private int branchFK; 


public EmployeeEditHandler() 
{ 
    paramEmPK = FacesContext.getCurrentInstance().getExternalContext() 
    .getRequestParameterMap().get("emPK"); 
    int emPK = Integer.parseInt(paramEmPK); 
    branchList = new ArrayList<Branch>(); 
    employeeBean = new Employee(); 
    FacesContext context = FacesContext.getCurrentInstance(); 
    try 
    { 
    employeeBean = DaoFactory.getEmployeeDao().lookupEmployeeByPK(emPK); 
    branchFK = employeeBean.getBranchFK(); 
    branchList = DaoFactory.getBranchDao().findAllBranch(); 

    } 
    catch (Exception e) { 
    FacesMessage msg = new FacesMessage(e.getMessage()); 
    msg.setSeverity(FacesMessage.SEVERITY_ERROR); 
    context.addMessage("employeeEditForm", msg); 
    } 
} 

The error is:javax.servlet.ServletException: Argument Error: An option for component j_id8 was not an instance of javax.faces.model.SelectItem. Type found: java.util.ArrayList. javax.faces.webapp.FacesServlet.service(FacesServlet.java:277) org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206) org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290) org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388) org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)

回答

1

你需要你的employeeEditBean.branchListList<SelectItem>類型,其中每個SelectItem有一個值(將被轉移爲之後的參數字符串)和一個標籤。

所以你需要創建基於你原來的分支列表的列表。

2

其實,我找到了另一種方法來做到這一點。我添加了一個tomahawk12庫。

<h:selectOneMenu value="#{employeeEditBean.branchFK}"> 
    <t:selectItems value="#{employeeEditBean.branchList }" var="br" itemLabel="#{br.branchName}" itemValue="#{br.branchPK }" /> 
</h:selectOneMenu> 

我沒有更改employeeEditBean中的代碼。

謝謝全部