jsf SelectOne菜单错误

jsf SelectOne菜单错误,jsf,Jsf,你好: 我正在开发一个jsf项目,我正在努力让selectOneMenu正常工作 <h:selectOneMenu value="#{employeeEditBean.employeeBean}"> <f:selectItems value="#{employeeEditBean.branchList}" /> </h:selectOneMenu> public class EmployeeEditHandler { private S

你好: 我正在开发一个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);
  }
 }

公共类EmployeeEditHandler
{
私有字符串参数mpk;
私人雇员;
私人名单分册;
私人国际分行;
公共雇员EditHandler()
{
ParameterMPK=FacesContext.getCurrentInstance().getExternalContext()
.getRequestParameterMap().get(“emPK”);
int emPK=Integer.parseInt(参数mpk);
branchList=新的ArrayList();
employeeBean=新员工();
FacesContext context=FacesContext.getCurrentInstance();
尝试
{
employeeBean=DaoFactory.getEmployeeDao().lookupEmployeeByPK(emPK);
branchFK=employeeBean.getBranchFK();
branchList=DaoFactory.getBranchDao().findAllBranch();
} 
捕获(例外e){
FacesMessage msg=新的FacesMessage(e.getMessage());
消息设置严重性(FacesMessage.SEVERITY_错误);
addMessage(“employeeEditForm”,msg);
}
}
错误为:javax.servlet.ServletException:参数错误:组件j_id8的选项不是javax.faces.model.SelectItem的实例。找到的类型: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.processuploadsandlerequest(BaseFilter.java:388) org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)


您需要将
employeeEditBean.branchList
类型设置为
List
,其中每个
SelectItem
都有一个值(将作为post参数传输的字符串)和一个标签


因此,您需要根据原始分支列表创建该列表。

事实上,我找到了另一种方法。我添加了一个tomahawk12库

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

我没有更改employeeEditBean中的代码

谢谢大家