2013-03-31 81 views
0

我必須創建屏幕才能在視圖中顯示大量的JPA實體。創建一個facelet並傳遞給它一組字段是很棒的,例如, List<Object>如何在運行時以編程方式生成JSF組件?

facelet /定製組件將需要將列表的每個元素轉換成適當的標籤以供顯示,例如,一個枚舉字段爲h:selectOneMenu,String字段爲h:inputText等。這需要在運行時完成。

這樣做最簡單的方法是什麼?

回答

0

工作在先前從已存儲配置動態創建整個頁面的項目上。有需要

  • 一個BackingBean兩個基本的東西。您將使用它來訪問Facelet上的UIComponent,它將作爲生成的UIComponent的父項。像一個panelGroup。但是,您需要將UIComponent綁定到後臺bean,以便擁有一個將要添加動態創建的UIComponents的父級對應用程序組件的訪問。通常情況下,FacesContext.getApplication()(我在JavaEE 5中對此進行了處理,因此它可能與注入有些不同)。一旦擁有應用程序組件,就可以調用createComponent方法,傳入要創建的組件類型。

然後它變成一個動態創建組件的活動,在代碼中配置它們並將它們添加到通過綁定bean定義的父UIComponent中。這可能很棘手,但可以完成。

+0

哇!涼!在我的服務器端項目上,我使用了org.primefaces.component.toolbar.Toolbar,並向其中添加了UIComponent子項。在facelet中我做了'',並且它在運行時產生了整個工具欄。在這種情況下,工具欄是爲每個用戶唯一地生成的,這真的很好。在facelet中有一個標籤,p:toolbar,做到了。在這個場景中,你會描述它在facelet中的樣子,例如我將綁定根UIComponent到什麼標籤? –

+0

我認爲它看起來與你描述的非常相似。您可能會在facelet本身中使用h:panelGroup,或類似於將作爲父容器UIComponent的東西。您可以使用binding屬性完全與您在工具欄示例中描述的相同。框架將創建UIComponent,並且您將在backingBean中引用它。一旦你有了,你可以將UIComponent添加到它,它是以編程方式創建的。 – EdH

相關問題