L'injection de Haricots en JSF 2.0
J'ai une Session d'étendue de haricot
import javax.faces.bean.SessionScoped;
import javax.inject.Named;
@Named
@SessionScoped
public class SessionBean implements Serializable{
Je inyect l'objet dans un Filtre...
public class FiltroSeguridad implements Filter{
@Inject
private SessionBean sessionBean;
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
sessionBean.setRutaRedirect(httpRequest.getRequestURI());
}
}
Mais, je inyect SessionBean dans l'interaction suivante...
@Model
public class CuentaUsuarioWebBean implements Serializable{
@Inject
private SessionBean sessionBean;
public void loginUsuario() throws IOException{
sessionBean.getRutaRedirect();
}
}
Mais la propriété getRutaRedirect()
retourne null
Je modifier l'importation en CDI annotations cela ne fonctionne toujours pas (javax.enterprise.context.SessionScoped
), même avec la JSF annotation (javax.faces.bean.ManagedBean
et @ManagedProperty
).
Grâce.
PD: Désolé pour mon anglais!
- Cela ne fonctionne que si vous avez un
/WEB-INF/beans.xml
fichier (qui a un peu sain d'esprit IDE serait déjà de générer automatiquement lorsque vous choisissez le CDI facette et/ou qui est déjà mentionné dans un peu sain d'esprit CDI tutoriel, si vous avez lu le tutoriel). Avez-vous de ce fichier? - Salut. Oui, j'ai ce fichier
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas mélanger les annotations de ces deux paquets que vous utilisez
javax.faces.bean.SessionScoped
pour JSF, etimport javax.inject.Named
pour le CDI. À la fois tenir compte d'injection différents mécanismes et ne peuvent pas être mélangés dans la même bean. Vous devez sélectionner les deux annotations(pour Injection et de Haricots de la Portée) de la même package. Utilisez les ensembles suivants de leurs paquets correspondantPour CDI à base de haricot définitions
JSF à base de haricot définitions
EDIT: Maintenant, je comprends mieux à vos exigences, utiliser la construction d'injecter un managed bean JSF
Également note que, dans JSF, vous pouvez injecter seulement les haricots d'une portée plus large que leurs objectifs par exemple, vous pouvez injecter une
@SessionScoped
fève dans un@RequestScoped
bean et non l'inverseMais depuis JSF géré les haricots sont obsolètes, il vaut mieux utiliser le CDI aménagés. Dans ce cas, vous peut injecter plus courte portée haricots dans la vaste étendue de ceux
@Inject
pour un bean JSF.@inject
n'est applicable que pour les haricots dans le cadre de CDI. Pour les haricots en vertu de l'ACI, de l'utilisation@ManagedProperty
. Voir mise à jour de réponseOublier géré les haricots. Il ne fonctionnera pas avec un Filtre de cette façon. Si vous insistez sur l'utilisation de ce alors le faire correctement par suivre la réponse ici:
Comment mettre en œuvre une connexion filtre en JSF?
Maintenant en ce qui concerne les CDI, si vous avez problème, c'est qu'une valeur est null et que vous avez vérifié cela en fait obtenir un NPE ou alors (Puisque par exemple Eclipse débogueur parfois se tromper). Ensuite, vérifiez que vous avez utilisé corriger SessionScoped comme décrit par kolossus et également de vérifier ce que BalusC dit (beans.xml).
Un bon moyen de voir si le CDI est le travail, c'est de demander au gestionnaire de la fève. Mettre ce code de débogage quelque part et essayer: