jsf 下拉列表错误

harkue 2008-07-23 05:45:06
我的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为空值,但是显然不会啊·~~~~
到底是什么错误?
...全文
102 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

67,538

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧