在我的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,我的结果列表计数显示正确的结果数,但我的数据表没有显示。
答案 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)
希望这对你有用......