Question

Je vais développer un peu.Jsf est en quelque sorte extrêmement pénible à utiliser du point de vue du concepteur, un peu dans la mesure où il essaie de dessiner une image tout en ayant les mains liées dans le dos, mais il est bon pour mâcher des formulaires et répertorier de nombreuses données.Les sites que nous créons dans mon entreprise sont donc des pages d'administration jsf et des pages utilisateur jsp.Le problème se produit lorsque les pages utilisateur ont des formulaires et des éléments compliqués et que jsf commence à intervenir.

Voici la question :Je suis sur une page jsp pure.J'ai besoin d'accéder à une page JSF qui utilise un bean session.Comment puis-je initialiser ce bean ?Si j'étais sur la page jsf, je pourrais avoir un commandLink qui préparerait les données.La seule chose que je peux proposer, c'est d'avoir une page jsf factice qui fera le travail et me redirigera vers la page jsf nécessaire, mais c'est un peu moche, et je ne veux pas me retrouver avec 50 pages factices.Je préférerais trouver un mécanisme pour réinitialiser le bean déjà en session avec certains paramètres souhaités.

Modifier:quelques détails supplémentaires.Dans cette situation précise, j'ai des tests qui sont soit complets, soit filtrés.C'est un même test avec la même logique et tout, sauf que si le test est filtré, il devrait éliminer certaines questions en fonction des réponses.En cliquant sur un lien, il devrait démarrer un test demandé dans l'un des deux modes.Les liens font partie de l'arborescence du menu principal et sont visibles sur de nombreuses pages jsp sœurs.Ma tâche est d'avoir 4 liens :testA complet, testA filtré, testB complet, testB filtré, qui mènent tous sur la même page jsf et TestFormBean doivent être réinitialisés en conséquence.

Modifier:J'ai fait quelques recherches sur les facettes, et même si cela ne m'aidera pas pour le moment, je garderai certainement cela à l'esprit pour le prochain projet.

Était-ce utile?

La solution

Pour résoudre celui-ci, je créerais probablement un fragment JSF qui inclut uniquement votre formulaire, puis utiliserais un <c:import> balise pour l'inclure dans ma page JSF.

Cette solution est probablement un peu fragile en fonction de votre environnement.

MODIFIER:Voir la réponse de Chris Hall, FacesContext n'est pas disponible en dehors du FacesServlet.

Autres conseils

avez-vous envisagé d'utiliser des facettes ?Il vous permet de vous débarrasser de toutes les différences JSF/JSP (c'est un contrôleur de vue alternatif et supérieur).

Il prend également en charge une excellente sémantique au moment de la conception avec la balise jsfc...

<input type="text" jsfc="#{SomeBean.property}" class="foo" />

est traduit en interne vers les éléments JSF corrects, afin que vous puissiez travailler avec vos outils existants.

Vous pouvez récupérer un bean géré dans une bibliothèque de balises en utilisant quelque chose comme ceci :

FacesContext context = FacesContext.getCurrentInstance();
Object myBean = context.getELContext().getELResolver().getValue(context.getELContext(), null, "myBeanName");

Cependant, vous devrez utiliser la bibliothèque de balises de l'une de vos pages JSF.FacesContext.getCurrentInstance() renvoie null lorsqu'il est appelé en dehors de FacesServlet.

En fait, j'ai résolu ce problème en supprimant le bean de la session, il doit donc être généré à nouveau lorsque la page jsf est appelée.Ensuite, je récupère les paramètres d'obtention d'une requête dans le constructeur.

Créez un gestionnaire de balises JSP personnalisé.Vous pouvez ensuite récupérer le bean depuis la portée de la session, puis l'initialiser à la volée.Regarde ça Didacticiel pour plus de détails.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top