I have issues when I test these 3 cases, my problem is about annotations
1st case
Description : use @Component and @ViewScoped, the function ajouterCommentaire() work properly, this means that @Autowired work properly
Issue : the @PosContruct init mehtod give a NullPointerException when executing the function obtenirUserClient()
package com.andriasoft.mppm.client.controller;
import com.andriasoft.mppm.entity.Carte;
import com.andriasoft.mppm.entity.Commentaire;
import com.andriasoft.mppm.entity.Defunt;
import com.andriasoft.mppm.entity.UtilisateurClient;
import com.andriasoft.mppm.repository.CommentaireRepository;
import com.andriasoft.mppm.repository.UtilisateurClientRepository;
import com.andriasoft.mppm.utils.Utils;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ViewScoped;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
*
* @author nathan
*/
@Component("MBLivreDor")
@ViewScoped
public class MBLivreDor implements Serializable {
@Autowired
UtilisateurClientRepository utilisateurClientRepository;
@Autowired
CommentaireRepository commentaireRepository;
private UtilisateurClient userClient;
private Carte carte;
private Defunt defunt;
private List<Commentaire> mainComments;
private Commentaire commentaire = new Commentaire();
public MBLivreDor() {
}
@PostConstruct
private void init() {
try {
userClient = obtenirUserClient();
carte = userClient.getCarte();
defunt = carte.getDefunt();
mainComments = commentaireRepository.findMainCommentByCarte(carte);
} catch (Exception e) {
e.printStackTrace();
}
}
public void ajouterCommentaire() {
commentaire.setCarte(carte);
commentaire.setCreatedAt(new Date());
commentaire.setNote(0);
commentaire.setUtilisateurClient(userClient);
commentaireRepository.save(commentaire);
commentaire = new Commentaire();
mainComments = commentaireRepository.findMainCommentByCarte(carte);
}
public UtilisateurClient obtenirUserClient() {
UtilisateurClient utilisateurClient = (UtilisateurClient) Utils.getRequest().getSession().getAttribute("utilisateurClient");
return utilisateurClient;
}
}
2nd case
Description : use @ManagedBean and @ViewScoped, @PostConstruct init() work properly
Issue : the function ajouterCommentaire() doesn't work properly, the problem is about the @Autowired annotation, it's not detected
package com.andriasoft.mppm.client.controller;
import com.andriasoft.mppm.entity.Carte;
import com.andriasoft.mppm.entity.Commentaire;
import com.andriasoft.mppm.entity.Defunt;
import com.andriasoft.mppm.entity.UtilisateurClient;
import com.andriasoft.mppm.repository.CommentaireRepository;
import com.andriasoft.mppm.repository.UtilisateurClientRepository;
import com.andriasoft.mppm.utils.Utils;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import org.springframework.beans.factory.annotation.Autowired;
/**
*
* @author nathan
*/
@ViewScoped
@ManagedBean(name = "MBLivreDor")
public class MBLivreDor implements Serializable {
@Autowired
UtilisateurClientRepository utilisateurClientRepository;
@Autowired
CommentaireRepository commentaireRepository;
private UtilisateurClient userClient;
private Carte carte;
private Defunt defunt;
private List<Commentaire> mainComments;
private Commentaire commentaire = new Commentaire();
public MBLivreDor() {
}
@PostConstruct
private void init() {
try {
userClient = obtenirUserClient();
carte = userClient.getCarte();
defunt = carte.getDefunt();
mainComments = commentaireRepository.findMainCommentByCarte(carte);
} catch (Exception e) {
e.printStackTrace();
}
}
public void ajouterCommentaire() {
commentaire.setCarte(carte);
commentaire.setCreatedAt(new Date());
commentaire.setNote(0);
commentaire.setUtilisateurClient(userClient);
commentaireRepository.save(commentaire);
commentaire = new Commentaire();
mainComments = commentaireRepository.findMainCommentByCarte(carte);
}
public UtilisateurClient obtenirUserClient() {
UtilisateurClient utilisateurClient = (UtilisateurClient) Utils.getRequest().getSession().getAttribute("utilisateurClient");
return utilisateurClient;
}
}
3rd case
Description : use @Component, @Scope, @ManagedBean
Issue : the issue is the same as the 1st case
package com.andriasoft.mppm.client.controller;
import com.andriasoft.mppm.entity.Carte;
import com.andriasoft.mppm.entity.Commentaire;
import com.andriasoft.mppm.entity.Defunt;
import com.andriasoft.mppm.entity.UtilisateurClient;
import com.andriasoft.mppm.repository.CommentaireRepository;
import com.andriasoft.mppm.repository.UtilisateurClientRepository;
import com.andriasoft.mppm.utils.Utils;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
/**
*
* @author nathan
*/
@Component("MBLivreDor")
@Scope("singleton")
@ManagedBean(name = "MBLivreDor")
public class MBLivreDor implements Serializable {
@Autowired
UtilisateurClientRepository utilisateurClientRepository;
@Autowired
CommentaireRepository commentaireRepository;
private UtilisateurClient userClient;
private Carte carte;
private Defunt defunt;
private List<Commentaire> mainComments;
private Commentaire commentaire = new Commentaire();
public MBLivreDor() {
}
@PostConstruct
private void init() {
try {
userClient = obtenirUserClient();
carte = userClient.getCarte();
defunt = carte.getDefunt();
mainComments = commentaireRepository.findMainCommentByCarte(carte);
} catch (Exception e) {
e.printStackTrace();
}
}
public void ajouterCommentaire() {
commentaire.setCarte(carte);
commentaire.setCreatedAt(new Date());
commentaire.setNote(0);
commentaire.setUtilisateurClient(userClient);
commentaireRepository.save(commentaire);
commentaire = new Commentaire();
mainComments = commentaireRepository.findMainCommentByCarte(carte);
}
public UtilisateurClient obtenirUserClient() {
UtilisateurClient utilisateurClient = (UtilisateurClient) Utils.getRequest().getSession().getAttribute("utilisateurClient");
return utilisateurClient;
}
}
So, how to anotate my JSF managed bean to make both of these functionnality to work :
- @PostConstruct init method when rendering the page caller, or the equivalent in Spring
- @Autowired, to be detected