多次执行相同操作时出现NullPointerException

时间:2014-07-13 05:51:28

标签: jsf primefaces

在我的xhtml页面中,我有一个搜索按钮和一个p:datatable来显示搜索结果。我添加了一个c:if条件来隐藏和显示数据表。

<c:if test="#{!search_bean.isResultList}">

在我的managedBean中,我创建了标志isResultEmpty并在我的doInit()中将其设置为true。在我的搜索按钮(actSearchForData)的操作中,如果我的列表不为空,我将其设置为true。

private String actSearchForData() throws Exception {
     if(resultList.size > 0) {
        isResultEmpty = false;
     }
}

现在,当我第一次执行actSearchForData并显示我的resultList时,这没有任何错误。但是当我第二次尝试运行actSearchForData时,我遇到了nullpointer异常。我通过在获取resultList之后返​​回isResultEmpty = true来尝试调试,但这只会导致我的标志始终返回isResultEmpty = true。

如何多次执行搜索功能并在数据表中显示结果而不会出现任何nullpointer异常?

更新:我这次尝试再次使用渲染渲染的标志,如render =&#34;!#{search_bean.isResultEmpty}&#34;。我不再获得nullpointerexception,我的结果列表计数显示正确的结果数,但我的数据表没有显示。

2 个答案:

答案 0 :(得分:2)

控制条件渲染的JSF方法是使用像

这样的渲染属性
<p:dataTable id="..." 
             value="#{search_bean.resultList}"
             var="..."
             rendered="#{not empty search_bean.resultList}" />

如果resultList为null或resultList.size()为0,则不会呈现数据表。

答案 1 :(得分:0)

你必须得到 NullPointerException (可能) - 因为“resultList”为空并且你仍在执行“ resultList.size ”在“ if(..)”声明中

尝试像这样......

private String actSearchForData() {
    if(resultList==null || resultList.size>0) {
        isResultEmpty=false;
    }
}

此代码执行“ isResultEmpty = false ” - if(resultList为null)

希望这对你有用......