2013-04-22 72 views
0

我有一個問題,我調用了支持bean中的一個方法,該方法應該更新一個列表,然後在我的xhtml頁面上重新顯示rich:datagrid以反映更改.Via調試我可以確認該方法被成功調用,但是它在一次遍歷列表後跳出方法並轉到另一個類(不是我的類之一)。它永遠不會返回到該方法,並且datagrid也是從未重投。在支持bean中執行方法時跳轉到未知類的代碼

下面是相關的html和java代碼。 HTML:

<table width="650px"> 
    <tbody> 
     <tr> 
      <td width="325px" align="left"><h:outputText style="white-space: pre; font-weight: normal; font-family: Tahoma; font-size: 11px">Name :</h:outputText> 
       <h:inputText id="searchName" size="25" value="#{myBean.searchName}"></h:inputText></td> 
      <td width="325px" align="left"><h:outputText style="white-space: pre; font-weight: normal; font-family: Tahoma; font-size: 11px">Surname :</h:outputText> 
       <h:inputText id="searchSurname" size="25" value="#{myBean.searchSurname}"></h:inputText></td> 
     </tr> 
     <tr> 
      <td width="325px" align="left"><h:outputText style="white-space: pre; font-weight: normal; font-family: Tahoma; font-size: 11px">ID :</h:outputText> 
       <h:inputText id="searchId" size="25" value="#{myBean.searchId}"></h:inputText></td> 
      <td width="325px" align="left"><h:outputText style="white-space: pre; font-weight: normal; font-family: Tahoma; font-size: 11px">Status :</h:outputText> 
       <h:inputText id="searchStatus" size="25" value="#{myBean.searchStatus}"></h:inputText></td> 
     </tr> 
     <tr> 
      <td align="right"><a4j:commandButton action="#{myBean.searchRecords}" value="Search" render="dataList"></a4j:commandButton></td> 
     </tr> 
    </tbody> 
</table> 

的Java:

public void searchRecords(){ 
    if(dataList == null){ 
     dataList = searchList; 
    } 

    searchList = Collections.<ListObj>emptyList(); 

    for (ListObj obj : dataList) { 
     if((obj.getName().contains(searchName)) | (obj.getSurname().contains(searchSurname)) | (obj.getIdNumber().contains(searchId)) | (obj.getStatus().equalsIgnoreCase(searchStatus))){ 
      searchList.add(obj); 
     } 
    } 
} 

的代碼會跳轉到。我正在使用Apache MyFaces的JSF 2.1,RichFace 4.3和Java 1.6上searchList.add的未知類(OBJ)。我認爲這可能與JSF生命週期有關,因爲我對生命週期的理解是嚴重缺乏的,但出於同樣的原因,我可能會錯誤的。我正在閱讀BalusC關於生命週期的文章。

+0

你能告訴我們你的調試器顯示執行的未知類和方法的名稱是什麼? – Apurv 2013-04-22 08:56:20

回答

0

你的來源是你試圖添加元素到空列表。方法Collections.emptyList();返回定義到類Collections中的特殊內部類EmptyList的實例。這個特殊的列表不能修改。嘗試向其添加元素不會修改其內容。

因此,將行searchList = Collections.<ListObj>emptyList();更改爲searchList = Collections.new ArrayList<ListObj>();,然後重試。

+0

Thx很多這個答案。我不知道它不只是返回一個清單ListObj是空的。 – Vinc 2013-04-22 09:10:17

相關問題