我的Bean:
Person.java
import java.util.ArrayList;
import java.util.List;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;
public class Person {
private String name = "test";
private String value = "test";
private List names = new ArrayList();
private List values = new ArrayList();
// 这个方法什么也没写,主要就是刷新页面用
public void onChangeName(ValueChangeEvent event) {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List getNames() {
names.add(new SelectItem("bb","bb"));
names.add(new SelectItem("cc","cc"));
return names;
}
public void setNames(List names) {
this.names = names;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public void setValues(List values) {
this.values = values;
}
// 在values的getValues方法中来处理数据
public List getValues() {
// 设置初始值
// 当name取值为bb时,赋值,此处可以从数据库取值
if (name.equals("bb"))
values.add("BB");
// 当name取值为cc时,赋值,此处可以从数据库取值
if (name.equals("cc"))
values.add("CC");
return values;
}
}
页面person.jsp:
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ page language="java" pageEncoding="gb2312"%>
<html>
<head>
<title>Person</title>
</head>
<body>
<f:view>
<h:form>
<table border="1">
<tr>
<td><h:selectOneMenu value="#{person.name}"
onchange="this.form.submit();"
valueChangeListener="#{person.onChangeName}">
<f:selectItems value="#{person.names}"/>
</h:selectOneMenu></td>
</tr>
</table>
</h:form>
</f:view>
</body>
</html>
配置文件faces-config.xml:
<managed-bean>
<managed-bean-name>person</managed-bean-name>
<managed-bean-class>de.laliluna.tutorial.library.Person</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
然后一直报错:
javax.servlet.ServletException: javax.servlet.jsp.JspException: "{2}" Conversion Error setting value ''{0}'' for ''{1}''.
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:821)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
org.apache.jsp.person_jsp._jspService(person_jsp.java:81)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:322)
com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:147)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:87)
com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:198)
root cause
java.lang.IllegalArgumentException: "{2}" Conversion Error setting value ''{0}'' for ''{1}''.
com.sun.faces.util.Util.getSelectItems(Util.java:610)
com.sun.faces.renderkit.html_basic.MenuRenderer.getOptionNumber(MenuRenderer.java:488)
com.sun.faces.renderkit.html_basic.MenuRenderer.renderSelect(MenuRenderer.java:465)
com.sun.faces.renderkit.html_basic.MenuRenderer.encodeEnd(MenuRenderer.java:430)
javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:712)
javax.faces.webapp.UIComponentTag.encodeEnd(UIComponentTag.java:616)
javax.faces.webapp.UIComponentTag.doEndTag(UIComponentTag.java:539)
com.sun.faces.taglib.html_basic.SelectOneMenuTag.doEndTag(SelectOneMenuTag.java:505)
org.apache.jsp.person_jsp._jspx_meth_h_selectOneMenu_0(person_jsp.java:171)
org.apache.jsp.person_jsp._jspx_meth_h_form_0(person_jsp.java:138)
org.apache.jsp.person_jsp._jspx_meth_f_view_0(person_jsp.java:107)
org.apache.jsp.person_jsp._jspService(person_jsp.java:71)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:322)
com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:147)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:87)
com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:198)
网上搜索说,names为空值,但是显然不会啊·~~~~
到底是什么错误?