2008-09-03 10 views
4

Je vais élaborer un peu. Jsf est extrêmement pénible pour travailler avec du point de vue du concepteur, quelque peu dans le but d'essayer de dessiner une image tout en ayant les mains attachées à votre dos, mais c'est bon pour mâcher des formulaires et énumérer beaucoup de données. Donc, les sites que nous fabriquons dans ma société sont des pages admin jsf et des pages utilisateur jsp. Le problème se produit quand les pages d'utilisateur ont des formes compliquées et des trucs et jsf commence à rentrer.Mélanger jsp et jsf

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

Éditer: quelques détails supplémentaires. Dans cette situation spécifique, j'ai des tests complets ou filtrés. C'est un même test avec la même logique et tout, sauf si le test est filtré, il devrait éliminer certaines questions en fonction des réponses. En cliquant sur un lien, il devrait commencer un test demandé dans l'un des deux modes. Les liens sont des parties de l'arborescence du menu principal et sont visibles sur de nombreuses pages JSP. Ma tâche est d'avoir 4 liens: testA complet, testA filtré, testB complet, testB filtré, que tous les liens sur la même page jsf et TestFormBean doivent être réinitialisés en conséquence. Edit: J'ai fait quelques recherches sur les facelets, et même si ça ne m'aidera pas maintenant, je vais certainement garder cela à l'esprit pour le prochain projet.

Répondre

1

Pour résoudre celui-ci, je créerais probablement un fragment JSF qui inclut uniquement votre formulaire, puis utiliser un tag pour l'inclure dans ma page JSF.

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

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

4

Avez-vous envisagé d'utiliser des facelets? 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 la sémantique grande temps de conception avec le tag JSFC ...

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

est traduite en interne à la substance JSF correcte, de sorte que vous pouvez travailler avec vos outils existants.

0

Créez un gestionnaire de balises JSP personnalisé. Vous pouvez ensuite récupérer le bean à partir de la portée de la session, puis l'initialiser à la volée. Voir ce tutorial pour plus de détails.

0

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

3

Vous pouvez récupérer un bean géré à l'intérieur d'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 aurez besoin d'utiliser la bibliothèque de balises d'une de vos pages JSF. FacesContext.getCurrentInstance() renvoie null lorsqu'il est appelé en dehors de FacesServlet.