2015-08-10 1 views
1

J'ai une page générique JSF et une classe abstraite qui est implémentée par de nombreuses autres pages et utilisée pour effectuer son traitement principal dans une méthode @PostConstruct. Maintenant que j'utilise des paramètres d'URL pour certaines pages, je souhaite déplacer le traitement de toutes les pages vers une méthode d'action viewAction afin de pouvoir utiliser les paramètres d'URL dans leur traitement.Si je ne peux pas utiliser f: viewAction dans un modèle JSF, où puis-je mettre un code de traitement post-URL générique?

Bien sûr, je ne peux pas utiliser f: métadonnées/f: viewAction dans mon modèle parce que n'est pas permis par JSF:

When using <ui:composition> templating, where should I declare the <f:metadata>?

est-il un moyen de gérer le traitement post-viewAction par tous de mes pages d'une manière générique? En ce moment, je l'ai travailler avec un f: tag événement:

page Modèle:

<ui:insert name="metadata"/> 

<h:head> 
    <f:event type="preRenderComponent" listener="#{controller.postProcessParams}" /> 
</h:head> 

page Client:

<ui:define name="metadata"> 
    <f:metadata> 
     <f:param name="id" value="#{manageProjects.id}"/> 
     <f:viewAction action="#{manageProjects.processParams}"/> 
    </f:metadata> 
</ui:define> 

<ui:param name="controller" value="#{manageProjects}"/> 

Est-ce bon bien?

+0

Où avez-vous placé ce ''? Ce devrait être un enfant direct de ''. – BalusC

+0

J'ai été mordu par une faute de frappe. Je l'ai recopié/collé dessus et ça marche maintenant. J'ai reformulé ma question en me demandant si ce que je faisais était «correct» ou non plutôt que de savoir comment le faire fonctionner. Espérant une réponse à cela! – wsaxton

Répondre

1

Une meilleure utilisation preRenderView au lieu de preRenderComponent, particulièrement si la méthode pourrait lancer une exception et/ou effectuer une navigation/redirect, sinon vous pourriez potentiellement faire face à une réponse incomplète et/ou le type de « réponse déjà commis » exception quand cela a eu lieu.

Le preRenderView est fondamentalement semblable à la pièce jointe preRenderComponent sur <f:view>/UIViewRoot. C'est à dire. avant que la vue entière ne soit rendue et donc garantie avant d'être écrite dans le corps de la réponse HTTP. Vous préférez ne pas exécuter de logique métier lorsque JSF est en train de générer une sortie HTML.

Pour le reste, l'approche de modélisation est OK.