2015-06-25 71 views
0

我正在使用primefaces。我的要求是有一些標籤,這些標籤將根據在後臺bean中指定的列表生成。現在第二個標準是如果標籤更改該標籤下的內容也應該改變。所以我保留了onChange事件並試圖通過event.getTab()。getTitle()獲取值,但是它向返回bean返回null。需要將當前選項卡名稱從動態生成的選項卡傳遞到支持管理bean

<p:tabView id="tabView" binding="#{dndProductsView.tabView}"> 
     <p:ajax event="tabChange" listener="#{dndProductsView.onTabChange}"/> 
</p:tabView> 

管Bean需要代碼爲: -

@PostConstruct 
public void init() { 
    user = SessionBean.getUserName(); 
    categorylist = categoryLogics.findAllOrderedByCategoryName(); 
    productList = productLogics.findAllOrderedByProductName(); 
    droppedProducts = new ArrayList<Product>(); 
} 

private TabView tabView; 

@Inject 
private FacesContext facesContext; 

public void setTabView(TabView tabView) { 
    this.tabView = tabView; 
} 

public TabView getTabView() { 
    tabView = new TabView(); 
    for (Category c : categorylist) { 
     Tab t = new Tab(); 
     t.setTitle(c.getCategoryName()); 
     tabView.getChildren().add(t); 
    } 
    return tabView; 
} 

public void onTabChange(TabChangeEvent event) { 
    String titleName = event.getTab().getTitle(); 
    System.out.println("" + titleName); 
} 

是越來越正確生成的標籤,並且當標籤改變時,onTabChange()方法被調用,但event.getTab()的getTitle(。 )返回null。

+0

Ofcourse開始,我不打印標籤標題。我只是想要這個值,以便我可以根據該標題值在數據庫中運行搜索以獲取與該類別關聯的產品。 – suchit

+1

在bean屬性上使用'binding'並在bean方法中操作組件樹總是很腥意,如果bean的範圍比請求範圍更廣泛的話。儘量避免這種情況,只需在XHTML中完成這項工作。將它替換爲'show showcase example並重試。 – BalusC

+0

我以前曾嘗試過,並且發生同樣的錯誤。你能引導我以任何其他方式生成類別,類別上的事件可以發送一些(有用的)到後端bean。 – suchit

回答

0
Integer index=(Integer)tabview.getActiveIndex(); 

它不是一個名字,但正是在這種情況下ACTIV選項卡女巫的指數是一個你感興趣的內容。 指數從0是第一個標籤:)

+0

雖然您可以使用索引,但它是一種不同的方法。 OP沒有試圖得到像getActiveTitle()這樣的東西,因爲那時你是100%正確的。 OP試圖從事件中獲得選項卡(其工作原理),但標題爲空。所以,雖然你的anwer是好的(甚至可能更好的方法),'getTitle()'爲空似乎並不確定imo – Kukeltje

+0

那麼他是動態創建標籤,並設置一些可能出錯的動作標題,所以他的標題可以最終爲空,而活動選項卡始終處於活動狀態選項卡(如果不存在),如果不存在,則首先不存在onTabChange。它會以某種方式解決空標題的問題:) –

+0

感謝您的答案,但問題是標籤視圖將從支持bean中的列表中獲取值,該列表本身將從數據庫獲取值並且當然這完全是動態的。因此,即使我獲得索引值,我也無法將它所屬的特定列表詳細信息附加到它。 – suchit

相關問題