[SEAM] 用f:SelectItems 中出現java.util.NoSuchElementException
Mrpublic
2009-06-04
<h:selectOneMenu value="#{bean.datevalue}" id="show"
<f:selectItem itemLabel=" ...請選擇..." /> <f:selectItems value="#{bean.date}" /> <a4j:support event="onchange" reRender="showList"></a4j:support> </h:selectOneMenu> bean這個類中, 我定義了一個 private String datevalue; //getter and setter 方法 ..... // public List<SelectItem> getDate(){ List<SelectItem> selectItem=new LinkedList<SelectItem>(); Set<Date> tempSet=new HashSet<Date>(); tempSet= manager.returnDate(); Iterator<Date> iterator=tempSet.iterator(); while(iterator.hasNext()){ Date date=iterator.next(); String label=changeDate(date); SelectItem item=new SelectItem(label,label); selectItem.add(item); } return selectItem; } |
|
Mrpublic
2009-06-04
tempSet= manager.returnDate();
是返回一個 HashSet對象; 在頁面上能在下拉菜單中出現我要的顯示結果,但選中下拉菜單上某個選項 觸發onchange 時就出下面的錯 =========================================== Caused by: java.util.NoSuchElementException at javax.faces.component.SelectItemsIterator.next(SelectItemsIterator.java:117) at javax.faces.component.SelectItemsIterator.next(SelectItemsIterator.java:144) at javax.faces.component.SelectItemsIterator.next(SelectItemsIterator.java:49) at javax.faces.component.UISelectOne.matchValue(UISelectOne.java:164) at javax.faces.component.UISelectOne.validateValue(UISelectOne.java:137) at javax.faces.component.UIInput.validate(UIInput.java:867) at javax.faces.component.UIInput.executeValidate(UIInput.java:1065) at javax.faces.component.UIInput.processDecodes(UIInput.java:636) at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1001) at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1001) at javax.faces.component.UIForm.processDecodes(UIForm.java:203) at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1001) at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1001) at org.ajax4jsf.component.AjaxViewRoot$1.invokeContextCallback(AjaxViewRoot.java:392) at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:238) at org.ajax4jsf.component.AjaxViewRoot.processDecodes(AjaxViewRoot.java:409) at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:101) ... 44 more |
|
Mrpublic
2009-06-04
這是怎么一回事呢? 難道不能用Set???
但改為List還是一樣的錯!!! 開始我返回的 Iterator<Date> iterator=tempSet.iterator(); while(iterator.hasNext()){ Date date=iterator.next(); String label=changeDate(date); SelectItem item=new SelectItem(label,label); selectItem.add(item); 是 Iterator<Date> iterator=tempSet.iterator(); while(iterator.hasNext()){ Date date=iterator.next(); String label=changeDate(date); SelectItem item=new SelectItem(date,label); selectItem.add(item); 頁面上的: <h:selectOneMenu value="#{bean.datetype}" id="show" <f:selectItem itemLabel=" ...請選擇..." /> <f:selectItems value="#{bean.date}" /> <a4j:support event="onchange" reRender="showList"></a4j:support> </h:selectOneMenu> datetype 是我在bean中定義的一個Date類型 它報這樣的錯: 不能把Date convert to null????? |
|
Mrpublic
2009-06-04
汗個 是會話問題:
取到的下拉列表的值為null 加上 @Scope(ScopeType.CONVERSATION)就OK了 |
|
Mrpublic
2009-06-04
我看了一下提示文檔
SelectItem item=new SelectItem(Object value,String label); 可為什麽我用 SelectItem item=new SelectItem(date,label); //date 為Date類型,label為 String 會出錯 而用 SelectItem item=new SelectItem(value, label); // value label都是String型 就OK呢? 難道 只能為兩個String類型的參數?? |
|
无双Rama
2009-07-09
Mrpublic 写道 汗個 是會話問題:
取到的下拉列表的值為null 加上 @Scope(ScopeType.CONVERSATION)就OK了 请问你这个会话是在哪里加的? 为什么我在后台action类中加了范围,但还在会报相同的错误呢? |
|
5day
2009-07-09
<h:selectOneMenu />
用<s:selectItems>是最方便的,不过总会出些莫名其妙的问题。 例如: <h:selectOneMenu id="acate" value="#{mlvsTvisit.aimcategory}"> <s:selectItems value="#{mlvsTAimCategorys}" var="mlvsTVisitAimCategory" label="#{mlvsTVisitAimCategory.viewname}" noSelectionLabel="请选择... ..." /> <s:convertEntity /> </h:selectOneMenu> 用<f:selectItems />最稳当。 new SelectItem(Object value,String label); 当然是可以用其他对象的,加<s:convertEntity />,不过要是entity。 <h:selectOneMenu value="#{cmScategoryinportal.category}"> <f:selectItems value="#{cmScategoryingroups}" /> <s:convertEntity /> </h:selectOneMenu> 日期类的选择为什么不用: <rich:calendar/>呢:例如: <rich:calendar value="#{mlvsTvisitalllist.mlvsTvisitallliststartdate}" datePattern="yyyy-MM-dd" /> 而java.util.NoSuchElementException错误很多是session的问题,我喜欢用@Factory方法来取得selectitems的value,提前将Factory方法需要用到的对象放到Page或者Session context中。这样就不大会出问题了。 |
|
Mrpublic
2009-07-09
5day 写道 <h:selectOneMenu />
用<s:selectItems>是最方便的,不过总会出些莫名其妙的问题。 例如: <h:selectOneMenu id="acate" value="#{mlvsTvisit.aimcategory}"> <s:selectItems value="#{mlvsTAimCategorys}" var="mlvsTVisitAimCategory" label="#{mlvsTVisitAimCategory.viewname}" noSelectionLabel="请选择... ..." /> <s:convertEntity /> </h:selectOneMenu> 用<f:selectItems />最稳当。 new SelectItem(Object value,String label); 当然是可以用其他对象的,加<s:convertEntity />,不过要是entity。 <h:selectOneMenu value="#{cmScategoryinportal.category}"> <f:selectItems value="#{cmScategoryingroups}" /> <s:convertEntity /> </h:selectOneMenu> 日期类的选择为什么不用: <rich:calendar/>呢:例如: <rich:calendar value="#{mlvsTvisitalllist.mlvsTvisitallliststartdate}" datePattern="yyyy-MM-dd" /> 而java.util.NoSuchElementException错误很多是session的问题,我喜欢用@Factory方法来取得selectitems的value,提前将Factory方法需要用到的对象放到Page或者Session context中。这样就不大会出问题了。 謝謝 5day哦 <s:convertEntity /> 是啥子意思哦 沒有遇到過哦 沒有見過,有啥作用 |
|
Mrpublic
2009-07-09
因為我是選中某一個日期便會觸發一個事件
|
|
5day
2009-07-09
<s:convertEntity />就是将对象转成seam可以识别的entity。
|