2013-06-18 74 views
2

所以,我最近開始使用richfaces 4開發JSF頁面,其中我有一個rich:collapsiblePanel。然而,我面臨一個問題,我在rich:dataGrid中使用collapsiblePanel,它通過迭代從服務器接收的列表來呈現collapsiblePanel。根據面板標題中的數據(當然在後臺bean中)有一個鏈接來「排序」collapsiblePanel。當任何一個collapsiblePanels被展開,並且分類鏈接被點擊時,所有這些都被展開,而所有的都被展開,如果一個被關閉,並且鏈接再次被點擊,所有這些都關閉。Richfaces可摺疊面板的擴展行爲

事情我已經嘗試:

  • 改變switchType任何其他比客戶(即AJAX和服務器)
  • 在支持Bean加上一個常數布爾迫使擴大屬性(儘管它甚至不受支撐豆的影響)

示例代碼現在是什麼樣子:

<h:panelGrid id="SomePanelGrid"> 
    <rich:dataGrid id="SomeDataGrid" value="bean.listValues" var="values" 
     iterationStatusVar="counter" elements="10"> 

      <rich:collapsiblePanel switchType="client" expanded="#{bean.expanded}"> 
       Layouts and what not (not in relation to this) 
      </rich:collapsiblePanel> 
    </rich:dataGrid> 
</h:panelGrid> 

鏈接只是在後臺bean中調用一個方法來進行排序。

我發現了一個類似的問題,涉及到dataTable而不是dataGrid,雖然沒有給出答案,但只有導致更多死角的鏈接。這可以在:https://community.jboss.org/message/819938

任何幫助將不勝感激。不幸的是,我目前沒有很多時間回答其他許多問題,但稍後我會回顧一下。

在此先感謝。

回答

0

你有你的代碼中的許多語法漏洞,這裏是如何它應該是這樣的:

<h:panelGrid id="SomePanelGrid"> 
    <rich:dataGrid id="SomeDataGrid" value="#{bean.listValues}" var="values" 
      iterationStatusVar="counter" elements="10"> 

     <rich:collapsiblePanel switchType="client" expanded="#{bean.expanded}"> 
      Layouts and what not (not in relation to this) 
     </rich:collapsiblePanel> 
    </rich:dataGrid> 
</h:panelGrid> 

您可能遇到只有一個 collapsiblePanel在你的例子,該代碼修改和正確的測試工作。

現在,如果要在通過AJAX刷新數據網格時保存collapsiblePanels展開狀態,則需要添加一些內容。

首先,你需要一個屬性添加到你的對象你迭代上,以節省每個面板的狀態。

public class Item 
{ 
    private boolean expanded; 

    public void setExpanded(boolean expanded) 
    { 
     this.exanded = expanded; 
    } 

    public boolean getExpanded() 
    { 
     return this.expanded; 
    } 

    // Your other stuff 
} 

,你需要在你的bean添加一個偵聽器,當用戶改變面板的狀態就知道了,注意屬性要回去的項目是與此相關的面板。

@ManagedBean 
@ViewScope 
public class Bean 
{ 
    private List<Item> listValues; 

    @PostConstruct 
    void init() 
    { 
     listValues = //... Some initialization to your list 
    } 

    public List<Item> getListValues() 
    { 
     return this.listValues; 
    } 

    public void toggle(PanelToggleEvent event) 
    { 
     // Take the current item 
     Item item = (Item)event.getComponent().getAttributes().get("item"); 

     // Save the current state in the item 
     item.setExpanded(event.getExpanded()); 
    } 
} 

最後,你需要改變你的switchType到AJAX和您的代碼添加監聽器沒有忘記需要在監聽器傳遞的屬性。

<h:form> 
    <rich:dataGrid id="SomeDataGrid" value="#{bean.listValues}" var="item" 
      iterationStatusVar="counter" elements="10"> 

     <rich:collapsiblePanel switchType="ajax" expanded="#{item.expanded}"> 
      <f:attribute name="item" value="#{item}" /> 

      Layouts and what not (not in relation to this) 
     </rich:collapsiblePanel> 
    </rich:dataGrid> 
</h:form> 
+0

如果任何人遇到此解決方案的問題,因爲偵聽器無法正常工作,請在此處查看此問題:https://issues.jboss.org/browse/RF-11568 – Louise