2014-09-03 12 views
1

我有dataTable的getter被調用,當它不應該。我們在CDI中使用JSF 2.2.6。h:數據表getter儘管渲染=「false」調用

下面是來自XTHML文件中的一部分:

<h:panelGroup rendered="false"> 
    <h:dataTable id="someObjectTable" border="0" width="900" 
     value="#{SomeController.someObjects}" 
     rowClasses="odd, even" var="value" columnClasses="formLeft, formRight" 
     listHeight=""> 

    </h:dataTable> 
</h:panelGroup> 

而這裏的豆:

public List<SomeObject> getSomeObjects(){ 
    //... ... ... 
    return resutList; 
} 

即使周圍的DataTable中的panelGroup中有其呈現設置爲false,getSomeObjects被調用。這是爲什麼?即使它不會被渲染,它是否真的被調用?

+0

是'的xmlns:h'模板正確聲明?如果是這樣,請編輯問題以在getter中包含'Thread.dumpStack()'調用的單個結果,以便我們可以看到誰在調用它以及爲什麼。 – BalusC 2014-09-03 09:53:10

回答

0

我發現了一個解決方案,但一點點棘手。

嘗試使用JSTL標記

<c:if test="#{renderCondition}"> 
    <h:dataTable id="someObjectTable" border="0" width="900" 
     value="#{SomeController.someObjects}" 
     rowClasses="odd, even" var="value" columnClasses="formLeft,formRight" 
    listHeight=""> 
    </h:dataTable> 
</c:if> 
+1

爲什麼棘手?並且請記住,在這種情況下,您無法再使用ajax更新來渲染它 – Kukeltje 2015-10-15 11:06:23

+0

是的,您無法使用ajax更新進行渲染,除非它不是從外部更新的。在我的項目中,我從外部更新了這是爲什麼我沒有看到。 – 2015-10-16 06:47:02