在辅助bean中执行方法时,代码跳转到未知类

时间:2013-04-22 08:53:41

标签: java jsf-2 richfaces myfaces

我有一个问题,我在后台bean中调用一个方法,该方法应该更新一个列表,之后在我的xhtml页面上重新呈现一个rich:datagrid以反映更改.Via调试我可以确认该方法被调用然而,它成功地跳过了一个迭代后通过列表跳转到另一个类(不是我的一个类)。它永远不会返回到方法,数据网格也永远不会被重新呈现。

以下是相关的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>

爪哇:

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);
        }
    }
}

代码跳转到searchList.add(obj)上的unkown类。我正在使用Apache MyFaces JSF 2.1,RichFace 4.3和Java 1.6。我认为这可能与JSF生命周期有关,因为我对生命周期的理解非常缺乏,但出于同样的原因,我可能会出错。我正在阅读BalusC关于生命周期的帖子。

1 个答案:

答案 0 :(得分:0)

您的原因是您正在尝试将元素添加到空列表中。方法Collections.emptyList();返回定义到类EmptyList中的特殊内部类Collections的实例。此特殊列表无法修改。尝试向其添加元素不会修改其内容。

因此,请将searchList = Collections.<ListObj>emptyList();行更改为searchList = Collections.new ArrayList<ListObj>();,然后重试。