jsf SelectOne菜单错误
你好: 我正在开发一个jsf项目,我正在努力让selectOneMenu正常工作jsf SelectOne菜单错误,jsf,Jsf,你好: 我正在开发一个jsf项目,我正在努力让selectOneMenu正常工作 <h:selectOneMenu value="#{employeeEditBean.employeeBean}"> <f:selectItems value="#{employeeEditBean.branchList}" /> </h:selectOneMenu> public class EmployeeEditHandler { private S
<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中的代码
谢谢大家