我想擁有一個與模型綁定的可重用UI組件。如何在JSF中創建可重用組件?
例如:
- 我有一個鏈接到另一個selectOneMenu用於一個selectOneMenu用於(如部門 - >子部門)
- 想使之成爲一個複合材料部件
- 這種複合組件將被綁定到特定的JSF豆
我認爲這個想法的作品,如果即時通訊只使用一個compositeComponent。
但是,如果我使用相同類型的多個compositeComponent的,這不會起作用,因爲compositeComponent的JSF豆將是相同的(在這個例子中,即時通訊使用的視圖範圍內),並且將共享狀態在一個或多個複合組件之間。
這是一個粗略的例子,說明了我的困惑。在這種情況下,Page1.xhtml(與Page1Bean.java的主模型),利用了2個compositeComponents(其由MyCompositeComponent.java的JSF豆處理)
的複合元件將是這樣的:
<!-- one composite component that has 2 chained selectOneMenus -->
<h:selectOneMenu
...
value="#{myCompositeComponentBean.firstComboValue}"
valueChangeListener="#{myCompositeComponentBean.yyy}">
<f:ajax event="valueChange" execute="@this" ... />
<f:selectItem itemLabel="Choose one .." noSelectionOption="true" />
<f:selectItems value="#{myCompositeComponentBean.firstComboList}" .... />
</h:selectOneMenu>
<h:selectOneMenu
...
value="#{myCompositeComponentBean.secondComboValue}"
valueChangeListener="#{myCompositeComponentBean.bbb}">
<f:selectItem itemLabel="Choose one .." noSelectionOption="true" />
<f:selectItems value="#{myCompositeComponentBean.secondComboList}" .... />
</h:selectOneMenu>
和複合組件的JSF豆會像:
// this model will serve the composite component
@Named
@Scope("view")
public class MyCompositeComponentBean {
private String firstComboValue, secondComboValue;
private List<String> firstComboList, secondComboList;
...
}
這是Page1.xhtml的示例:
....
main department : <my:comboChainComponent /> <!-- 2 select items will be rendered here -->
secondary department : <my:comboChainComponent /> <!-- another 2 select items will be rendered here -->
....
而且Page1Bean(JSF主要爲豆Page1.xhtml)
@Named
@Scope("view")
public class Page1Bean {
// inject the first bean for the composite component 1
@Inject private MyCompositeComponentBean bean1;
@Inject private MyCompositeComponentBean bean2;
...
}
是否有可能實現這種重用的?
謝謝。
你好,謝謝你的回覆。我還沒有開發複合組件的技術困難,但更重要的是如何使這個複合組件可重複使用以及它的耦合JSF Bean,它可以在單個頁面中多次使用。 – bertie 2011-04-28 12:23:15
嗨,阿爾伯特,你可以在單個頁面中使用複合組件(儘管我不太瞭解需求)。 – 2011-04-28 14:39:27