Je voudrais avoir un composant ui réutilisable qui est lié au modèle.Comment faire un composant réutilisable dans JSF?
Par exemple:
- j'ai un selectonemenu qui est enchaînée à un autre selectonemenu (comme département -> sous-département)
- Aimerait faire une pièce composite
- Ce composant composite est Je vais être lié à un Bean JSF spécifique
Je pense que cette idée fonctionne si je n'utilise qu'un composant composite.
Mais cela ne fonctionnera pas si je fais usage de plus d'un compositeComponent du même type, puisque le Bean JSF de compositeComponent sera le même (dans cet exemple, im en utilisant la portée de vue), et partagera l'état entre un ou plusieurs composants composites.
Ceci est un exemple approximatif qui illustre ma confusion. Dans ce cas, Page1.xhtml (avec le modèle principal de Page1Bean.java), fait usage de 2 compositeComponents (qui est gérée par le Bean JSF de MyCompositeComponent.java)
La composante composite sera quelque chose comme:
<!-- 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>
Et le JSF du composant composite Bean sera comme:
// this model will serve the composite component
@Named
@Scope("view")
public class MyCompositeComponentBean {
private String firstComboValue, secondComboValue;
private List<String> firstComboList, secondComboList;
...
}
Voici un exemple de 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 -->
....
Et le Page1Bean (Principal JSF Bean pour 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;
...
}
Est-il possible de réaliser ce genre de réutilisabilité?
Merci.
Bonjour, merci pour la réponse. Je n'ai pas encore de difficultés techniques dans le développement d'un composant composite, mais plutôt sur la façon de rendre ce composant composite réutilisable avec son bean JSF couplé, qui peut être utilisé plusieurs fois sur une seule page. – bertie
Bonjour Albert, vous pouvez utiliser le composant composite autant que vous le souhaitez sur une seule page (même si je ne comprends pas vraiment le besoin). –