Bonjour,
je vais essayer de te donner qqs pistes. Ca ne couvre pas l'ensemble des possibilités, mais tu auras déjà qqs armes.
Une première piste : JSF passe par une série de phases AVANT affichage comprenant entre l'autres l'intréprétation de toutes les EL (expressions de langages) du type #{monBean.uneValeur}. Tu peux donc tenter de créer ta structure de page de manière conditionnelle en utilisant la propriété "rendered" de tes composants afin de déterminer la structure de ta page en fonction des données que tu auras récupérées de la base.
Ca ressemble à ça côté client :
<h:outputText value=#{monBean.text} rendered=#{monBean.textMustBeRendered} />
et côté serveur :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
private String text; // + public getters/setters
private Boolean textMustBeRendered; // + public getters/setters
/**
* method called at the begin
*/
@PostConstruct
public final void init() {
// gets text value From DB
setText(textService.getText());
// should component displaying 'text' should be rendered?
textMustBeRendered= (getText() != null);
}; |
Tu peux aussi, plutôt que d'écrire les structures à l'avance, les gérer avec un jQuery/script : puisque les ELs sont évaluées avant le rendu, elles auront la bonne valeur au moment où le script sera exécutées. Tu pourras donc construire ta page dynamiquement en fonction de ces valeurs.
Par contre, là, je ne t'aiderai pas bcp sur le code : je ne suis pas expert en scripts...
disons que ça ressemblerait à qqchose comme ça ( le code ci-dessous n'a rien de crédible : c'est juste un exemple de forme)
1 2 3 4 5 6 7 8 9 10 11
|
<script
type="text/javascript"
>
var $j = jQuery.noConflict();
$("#MonFormulaire").addClass("visible");
if(text != null){
$("#MonFormulaire").append("<p id='monText' value>#{monBean.text}</div>");
/* etc ... */
<script |
Toujours en utilisant les ELs, tu pourrais utiliser des composants de type <c:name> (composants du "core" jsf) qui te permettraient de construire ta page de façon conditionnelle là aussi.
Par exemple :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
<c:if test="#{!monBean.text ne null}">
<li class="text"><h:outputText value="#{monBean.text}" />
</li>
</c:if>
<c:forEach var="operation" items="#{monBean.operationsList}">
<c:if test="#{operation.id == operation.bank.id}">
<span class="name"><h:outputText value="#{operation.montant}" /> </span>
</c:if>
<c:if test="#{operation.id == operation.surgery.id}">
<span class="name"><h:outputText value="#{operation.type}" /> </span>
</c:if>
</c:forEach> |
Voilà... ça te fait déjà qqs pistes.
Il y a d'autres solutions (tu peux même créer ta page quasi entièrement depuis le bean)... mais tu as déjà qqs armes pour commencer.
En espérant avoir été clair!
Partager