2011-08-30 2 views
1

Nous avons besoin d'obtenir certaines informations de PortletRequest dans notre application de portail. Nous faisons cela en utilisant une méthode utilitaire dans notre application de portlet. Dans cette méthode utilitaire, nous accédons au FacesContext.getCurrentInstance().getRequest() pour obtenir PortletRequest. Nous accédons à cette méthode utilitaire dans notre couche DAO. Nous n'avons pas accès au paramètre de demande ici. Cela fonctionne parfois, mais parfois il me donne NullPointerException. J'ai trouvé un thread similaire qui explique à ce sujet. Ils ont mentionné, si cela fait partie de la même demande, alors vous devriez obtenir le contexte. Pour moi, cela fait partie de la même demande, mais je ne comprends pas le contexte. Pouvez-vous m'aider s'il vous plaît.Accès à FacesContext dans l'application Portal

Répondre

0

Si vous obtenez un FaceContext nul à partir de FacesContext.getCurrentInstance(), aucun FacesContext n'a été créé pour ce Thread/Request.

Les demandes défaillantes passent-elles par un point d'entrée non-faces? Comme une demande de portlet d'événement ou de ressource? Si c'est le cas, aucun FacesContext ne sera créé. Plutôt que de vous fier aux méthodes statiques et au stockage local de threads pour accéder aux données de votre DAO, vous devez extraire ce dont vous avez besoin de PortletRequest et le transmettre dans votre pile. Il est déconseillé de mélanger des artefacts de couche de présentation tels que FaceContext ou PortletRequest avec votre couche DAO.

0

Si votre application est déployée dans des fichiers WAR/JAR distincts, il est probable que différents chargeurs de classe soient utilisés. J'ai eu un problème similaire, lorsque j'ai essayé d'accéder au FacesContext dans une archive HAR hibernate sur JBOSS5. Je suis arrivé avec une solution réussie en utilisant l'API de réflexion. Jetez un oeil à this.

Si vous regroupez l'ensemble de votre application dans un fichier EAR, vous pouvez forcer l'utilisation d'un classloader pour l'ensemble de l'oreille, mais AFAIK spécifique au serveur d'applications.

Cordialement

Questions connexes