2011-08-25 58 views
0

我需要一個解決方案,通過代碼SelectOneMenu使用指定爲此組件的一個屬性的元數據進行填充。通過代碼SelectOneMenu基於屬性中的自定義元數據填充

這是我的要求的細節。

1)開發商會指定一些事情是這樣的:

<h:selectOneMenu id="someComponent" value="#{someController.someModel.someField}"> 
    <f:attribute name="entity" value="somepackage.SomeEntity" /> 
</h:selectOneMenu> 

2)當請求首次包含上述的頁面,服務器應該能夠閱讀「實體」屬性

3)一旦'實體'被讀取,服務器將做需要動態填充'someComponent'。

我沒有問題,應該使用'實體'屬性的代碼,並生成內容顯示'someComponent'。我的問題是找到適當的地方來有效地調用這個代碼。

我已經嘗試了'After Render Response Phase'後的PhaseEventListener,但沒有運氣。看起來我缺少一些基本的東西,因爲我是JSF的新手。

有人經歷過相同的實驗嗎?

預先感謝您。

尤尼斯干河

+0

JSF 1.x or 2.x? – BalusC

+0

我正在使用JSF 2.x –

+0

您是否使用Servlet 3.0/EL 2.2容器? – BalusC

回答

0

如果您將EL 2.2容器,它支持調用方法與參數和/或與你的web應用提供JBoss EL,使其工作在EL 2.1爲好,那麼就應該可以用下面的結構:

<h:selectOneMenu id="someComponent" value="#{someController.someModel.someField}"> 
    <f:selectItems value="#{someProvider.selectItems('somepackage.SomeEntity')}" /> 
</h:selectOneMenu> 

public List<SelectItem> getSelectItems(String className) { 
    // ... 
} 

我介紹一些遲緩裝載和/或基於請求的緩存機制以及一個gette r在bean的生命中可以被調用不止一次。

+0

我看到你的解決方案。但是,它更多地面向開發者而不是頁面作者。我寧願使用元數據(通過)。從不介意,非常感謝您的及時答覆。 –