comment distinguer une action ou un lien URL jsf directe invoqué la page

StackOverflow https://stackoverflow.com/questions/3875743

  •  28-09-2019
  •  | 
  •  

Question

J'ai une situation, j'ai un bean session avec la liste, cette liste que je montre dans le tableau de données html. Lorsque l'utilisateur touche l'URL du navigateur ou href normal, je dois montrer tous les dossiers. Il est prévu de rechercher les données aussi, où je dois montrer la liste filtrée. Maintenant, après qu'un utilisateur a fait la recherche, la liste contient des enregistrements filtrés et après avoir fait cela, il quitte la page à une autre, et maintenant si l'utilisateur frappe l'URL ou utilise le menu pour revenir à cette page, depuis que j'ai cette liste dans le haricot de session, j'ai encore la liste filtrée.

Comme il n'y a pas d'action par défaut JSF 1.1 ou 2.0 concept de preRenderView, il est difficile de effacer la liste et obtenir des données non filtrés (tous les résultats) à nouveau. astuces Même dans la méthode getList () ne parviennent pas à accomplir la tâche.

J'ai prévu d'utiliser auditeur de phase, comme lorsqu'un utilisateur accède à une page via href ou coup url dans le navigateur, Invoke phase d'application ne se produit pas. Je peux passer variable booléenne dans mon bean session et getList () Je peux effectuer une astuce pour vérifier était url, frappé href ou bouton de commande.

L'espoir je me suis fait clair. En bref, je dois identifier dans mon haricot si la demande est venue directement de href, navigateur ou une action. Si les enregistrements de filtre d'action de recherche pour la table de données si vous gardez pas le cache de liste et continuer à montrer aussi longtemps que la recherche ne se fait pas.

Il suffit de me guider si je fais les choses dans le bon sens ou de penser trop ou peut-il être fait de manière beaucoup plus efficace.

Merci d'avance. Eh bien la plate-forme est JSF 1.1 dans le portail weblogic 10.3 .....

Était-ce utile?

La solution

JSF actions 1.x utilisent par la méthode par défaut de POST. Liens directs / signets / etc sont par la méthode nature GET. Comme il n'y a pas de ResponseStateManager#isPostback() ou FacesContext#isPostback() JSF 1.1, vous devez déterminer la méthode de requête vous:

HttpServletRequest request = (HttpServletRequest) facesContext.getExternalContext().getRequest();
boolean postback = "POST".equalsIgnoreCase(request.getMethod());

Ou vérifier pour un certain paramètre dans la carte des paramètres de demande, mais je ne peux pas dire du haut de la tête que l'on vous souhaitez vérifier. Vous avez de déterminer vous-même.

boolean postback = facesContext.getExternalContext().getRequestParameterMap().containsKey(SOME_KEY);

Si postback est true, puis une action JSF est été invoquée.

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