2011-10-21 52 views
0

我在我的應用程序中使用JSF和Hibernate。假設我有一個用戶帳戶,其問題是我想要使用<ui:repeat><ul>無序列表中顯示。如果沒有問題,我不想呈現列表,而是顯示「無問題」文本。我目前帳戶的方式如下:在JSF中避免多餘的數據庫查詢並有條件地呈現一個UI:重複使用

<ul> 
<ui:repeat value="#{user.questions}" var="question"> 
    <li>#{question.text}</li> 
</ui:repeat> 
</ul> 

<h:outputText rendered=#{user.questions.size() == 0}">no questions</h:outputText> 

有兩個問題,雜散<ul>標籤,如果沒有其他問題。

我應該將它封裝在另一個面板中,再次使用rendered=#{user.questions.size() > 0},因爲它似乎ui:repeat不接受呈現的屬性。

第二個問題是,user.questions.size()計算兩次(和user.questions是在兩個不同的地方訪問),這是否意味着兩個命中爲同一個變量在db?

回答

1

我是不是應該將它封裝在另一個面板中,因爲它看起來好像是ui:repeat不接受渲染屬性。

是的。

的第二個問題是,user.questions.size()被計算兩次(和user.questions在兩個不同的地方訪問),這是否意味着兩支安打爲DB相同的變量?

這種行爲應該在模型中通過適當的範圍和緩存數據來處理。

@ManagedBean @RequestScoped 
public class DemoBean { 

    private List<Question> questions; 

    public List<Question> getQuestions() { 
    if(questions == null) { 
     questions = lookupQuestions(); 
    } 
    return questions; 
    } 

    // etc. 
+0

謝謝,我實際上通過從Hibernate的DAO獲取User.Question數據。你知道Hibernate是否緩存(是二級緩存相關的),還是我應該按照你的建議編寫一個包裝? – ustun

+0

@ustun - 我會問一個新的問題,詳細說明你如何使用/如何配置你的DAO並用Hibernate標記它。 – McDowell

相關問題