我在测试这3个案例时遇到问题,我的问题是关于注释
第一个案例
描述:使用@Component和@ViewScoped,函数ajouterCommentaire()正常工作,这意味着@Autowired正常工作
问题: @PosContruct init mehtod在执行函数obtenirUserClient()时会发出NullPointerException
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;
}
}
第二个案例
描述:使用@ManagedBean和@ViewScoped,@ PostConstruct init()正常工作
问题:函数ajouterCommentaire()无法正常工作,问题是@Autowired注释,未检测到
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;
}
}
第3个案例
描述:使用@Component,@ Scope,@ ManagedBean
问题:问题与第一种情况相同
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;
}
}
那么,如何分配我的JSF托管bean以使这两个功能都能正常工作: