您好: 我正在开发一个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);
}
}
错误是: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.processUploadsAndHandleRequest(BaseFilter.java:388) org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
答案 0 :(得分:2)
实际上,我找到了另一种方法。我添加了一个tomahawk12库。
<h:selectOneMenu value="#{employeeEditBean.branchFK}">
<t:selectItems value="#{employeeEditBean.branchList }" var="br" itemLabel="#{br.branchName}" itemValue="#{br.branchPK }" />
</h:selectOneMenu>
我没有更改employeeEditBean中的代码。
全部谢谢
答案 1 :(得分:1)
您需要employeeEditBean.branchList
类型为List<SelectItem>
,其中每个SelectItem
都有一个值(将作为post参数传输的字符串)和一个标签。
因此,您需要根据原始分支列表创建该列表。