2013-04-22 30 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

相关问题