Spring 4和JSF 2 ManagedBean

时间:2016-01-18 08:23:50

标签: spring jsf jsf-2

我在测试这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以使这两个功能都能正常工作:

  • @PostConstruct在渲染页面调用者时的init方法,或Spring中的等效方法
  • @Autowired,待检测

0 个答案:

没有答案