论坛首页 入门技术论坛

JSF的问题,希望那位可以指出问题所在

浏览 4289 次
该帖已经被评为新手帖
作者 正文
   发表时间:2007-04-19  
backbean的所有代码
  1. package org.hblz.common.web.jsf;   
  2.   
  3. import javax.faces.component.html.HtmlSelectOneListbox;   
  4. import javax.faces.event.ValueChangeEvent;   
  5. import javax.faces.model.SelectItem;   
  6.   
  7. import org.apache.log4j.Logger;   
  8.   
  9. public class UserBean {   
  10.   
  11.     @SuppressWarnings("unused")   
  12.     private static final Logger log = Logger.getLogger(UserBean.class);   
  13.   
  14.     private String message;   
  15.   
  16.     private SelectItem[] countyList = new SelectItem[0];   
  17.   
  18.     private Long countyId;   
  19.   
  20.     private HtmlSelectOneListbox countySelectList;   
  21.   
  22.     private SelectItem[] townList = new SelectItem[0];   
  23.   
  24.     private Long townId;   
  25.   
  26.     private HtmlSelectOneListbox townSelectList;   
  27.   
  28.     public void processCountySelectListChange(ValueChangeEvent event) {   
  29.   
  30.         this.message = "hello county!";   
  31.   
  32.         Long newValue = (Long) event.getNewValue();   
  33.   
  34.         townList = null;   
  35.   
  36.         townList = new SelectItem[10];   
  37.         for (int i = 0; i < 10; i++) {   
  38.             SelectItem st = new SelectItem(new Long(i), "Town No." + i   
  39.                     + " of County No." + newValue.toString());   
  40.             townList[i] = st;   
  41.         }   
  42.     }   
  43.   
  44.     public void processTownSelectListChange(ValueChangeEvent event) {   
  45.     }   
  46.   
  47.     public Long getCountyId() {   
  48.         return countyId;   
  49.     }   
  50.   
  51.     public void setCountyId(Long countyId) {   
  52.         this.countyId = countyId;   
  53.     }   
  54.   
  55.     public SelectItem[] getCountyList() {   
  56.         countyList = new SelectItem[30];   
  57.         for (int i = 0; i < 30; i++) {   
  58.             SelectItem st = new SelectItem(new Long(i), "No." + i);   
  59.             countyList[i] = st;   
  60.         }   
  61.   
  62.         return countyList;   
  63.     }   
  64.   
  65.     public void setCountyList(SelectItem[] countyList) {   
  66.   
  67.         this.countyList = countyList;   
  68.     }   
  69.   
  70.     public javax.faces.component.html.HtmlSelectOneListbox getCountySelectList() {   
  71.         return countySelectList;   
  72.     }   
  73.   
  74.     public void setCountySelectList(   
  75.   
  76.     javax.faces.component.html.HtmlSelectOneListbox countySelectList) {   
  77.         this.countySelectList = countySelectList;   
  78.     }   
  79.   
  80.     public String getMessage() {   
  81.         return message;   
  82.     }   
  83.   
  84.     public void setMessage(String message) {   
  85.         this.message = message;   
  86.     }   
  87.   
  88.     public Long getTownId() {   
  89.         return townId;   
  90.     }   
  91.   
  92.     public void setTownId(Long townId) {   
  93.         this.townId = townId;   
  94.     }   
  95.   
  96.     public SelectItem[] getTownList() {   
  97.   
  98.         if (townList == null) {   
  99.             townList = new SelectItem[0];   
  100.         }   
  101.   
  102.         return townList;   
  103.     }   
  104.   
  105.     public void setTownList(SelectItem[] townList) {   
  106.         this.townList = townList;   
  107.     }   
  108.   
  109.     public HtmlSelectOneListbox getTownSelectList() {   
  110.         return townSelectList;   
  111.     }   
  112.   
  113.     public void setTownSelectList(HtmlSelectOneListbox townSelectList) {   
  114.         this.townSelectList = townSelectList;   
  115.     }   
  116. }   

配置文件很简单

  1. <!---->xml version="1.0" encoding="UTF-8"?>  
  2. <!---->>  
  3.   
  4. <faces-config>  
  5.        
  6.     <managed-bean>  
  7.         <managed-bean-name>userBeanmanaged-bean-name>  
  8.         <managed-bean-class>  
  9.             org.hblz.common.web.jsf.UserBean   
  10.         managed-bean-class>  
  11.         <managed-bean-scope>requestmanaged-bean-scope>  
  12.     managed-bean>  
  13.        
  14.        
  15. faces-config>  
  16.   

 

下面是JSP代码

xml 代码
  1. <%@ page language="java" pageEncoding="ISO-8859-1"%>  
  2. <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>  
  3. <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>  
  4.   
  5. <%   
  6.     String path = request.getContextPath();   
  7.     String basePath = request.getScheme() + "://"   
  8.             + request.getServerName() + ":" + request.getServerPort()   
  9.             + path + "/";   
  10. %>  
  11.   
  12. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  13. <html>  
  14.     <head>  
  15.         <base href="<%=basePath%>">  
  16.   
  17.         <title>My JSF 'hello.jsp' starting page</title>  
  18.     
  19.     </head>  
  20.   
  21.     <body>  
  22.         <f:view>  
  23.             <h:form>  
  24.                 <h:selectOneListbox id="countySelectList"  
  25.                     value="#{userBean.countyId}" binding="#{userBean.countySelectList}"  
  26.                     size="1" onchange="this.form.submit()"  
  27.                     valueChangeListener="#{userBean.processCountySelectListChange}"  
  28.                     immediate="true">  
  29.                     <f:selectItems value="#{userBean.countyList}" />  
  30.                 </h:selectOneListbox>  
  31.   
  32.                 <h:selectOneListbox id="townSelectList" value="#{userBean.townId}"  
  33.                     binding="#{userBean.townSelectList}" size="1"  
  34.                     onchange="this.form.submit()"  
  35.                     valueChangeListener="#{userBean.processTownSelectListChange}"  
  36.                     immediate="true">  
  37.                     <f:selectItems value="#{userBean.townList}" />  
  38.                 </h:selectOneListbox>  
  39.   
  40.   
  41.                 <h:outputText value="#{userBean.message}"></h:outputText>  
  42.             </h:form>  
  43.         </f:view>  
  44.     </body>  
  45. </html>  
   发表时间:2007-04-19  
问题是第一次打开和第一次操作都没有问题,但是当操作一次在下拉后就出现了错误,错误信息如下:
java.util.NoSuchElementException
javax.faces.component.SelectItemsIterator.next(SelectItemsIterator.java:96)
javax.faces.component.SelectItemsIterator.next(SelectItemsIterator.java:119)
javax.faces.component.UISelectOne.matchValue(UISelectOne.java:141)
javax.faces.component.UISelectOne.validateValue(UISelectOne.java:114)
javax.faces.component.UIInput.validate(UIInput.java:634)
javax.faces.component.UIInput.executeValidate(UIInput.java:838)
javax.faces.component.UIInput.processDecodes(UIInput.java:383)
javax.faces.component.UIForm.processDecodes(UIForm.java:144)
javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:872)
javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:306)
com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:79)
com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:90)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:197)

0 请登录后投票
   发表时间:2007-04-20  
表达式:#{userBean.countyId}计算的值没有包含在下拉列表的值中,
selectOneListbox是通过value值来确定那个被选中的,如果List提供的可选值中没有value属性指定的值就会 NoSuchElementException
这个异常是说value的值在控件所提供的选项中不存在具有这个值的选项的意思!
0 请登录后投票
   发表时间:2007-04-20  
断点跟踪一下。。

某些是空的
0 请登录后投票
   发表时间:2008-04-08  
验证器出现了错误,在validate phase这个阶段,获得的下拉列表为空,所以验证失败,用session bean能解决这个问题
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics