0

私はprimefacesのページの例(http://www.primefaces.org/showcase/ui/datatableLazy.jsf)に従いましたが、うまくいきましたが、この例ではコンストラクターにリストをロードしているため、正確には遅延ロードではありません。私はそれがダミーの例であることを理解しているので、私のBeanにこの行を追加しました

private LazyDataModel<Ficha> lazyListFichas;

そして、私のinit関数は、いくつかの部分をこれに変更しました

@PostConstruct
    public void init() {
        System.out.println("Inicializando fichas");
        tienePadres=false;
        fichaDM.setFicha(new Ficha());
        //obtenerFichas();
        //lazyListFichas = new FichaLazyList(fichaDM.getFichas);
        lazyListFichas = new FichaLazyList();

    }

私のFichaLazyListはこのようなものです

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.ejb.EJB;
import javax.faces.bean.ViewScoped;

import org.primefaces.model.LazyDataModel;
import org.primefaces.model.SortOrder;

import ec.edu.puce.biologia.dao.FichaDao;
import ec.edu.puce.biologia.util.LazySorter;


@ViewScoped
public class FichaLazyList extends LazyDataModel <Ficha> {
    private static final long serialVersionUID = 1L;

    private List<Ficha> fichas=new ArrayList<Ficha>();

    @EJB
    private FichaDao fichaDao;

    public FichaLazyList() {  
    }  

    public FichaLazyList(List<Ficha> fichas) {  
        this.fichas = fichas;  
    }  

    @Override  
    public Ficha getRowData(String rowKey) {  
        for(Ficha ficha : fichas) {  
            if(ficha.getIdFicha().equals(rowKey))  
                return ficha;  
        }  

        return null;  
    }  

    @Override  
    public Object getRowKey(Ficha ficha) {  
        return ficha.getIdFicha(); 
    }  

    @Override  
    public List<Ficha> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String,String> filters) {  
        List<Ficha> data = new ArrayList<Ficha>();  

      //filter 
        fichas = fichaDao.encontrarPagina(first, pageSize);
        if(fichas==null){
            System.out.println("Lista nula");
        }
        for(Ficha ficha : fichas) {  
            boolean match = true;  

            for(Iterator<String> it = filters.keySet().iterator(); it.hasNext();) {  
                try {  
                    String filterProperty = it.next();  
                    String filterValue = filters.get(filterProperty);  
                    String fieldValue = String.valueOf(ficha.getClass().getField(filterProperty).get(ficha));  

                    if(filterValue == null || fieldValue.startsWith(filterValue)) {  
                        match = true;  
                    }  
                    else {  
                        match = false;  
                        break;  
                    }  
                } catch(Exception e) {  
                    match = false;  
                }   
            }  

            if(match) {  
                data.add(ficha);  
            }  
        }


        long total = fichaDao.contar();
        System.out.println("xxx"+total);

        //sort  
        if(sortField != null) {  
            Collections.sort(data, new LazySorter(sortField, sortOrder));  
        }  

        //rowCount  
       // int dataSize = data.size();  
        this.setRowCount((int) total);  

        //paginate  
        if(total > pageSize) {  
            try {  
                return data.subList(first, first + pageSize);  
            }  
            catch(IndexOutOfBoundsException e) {  
                return data.subList(first, first + ((int) total % pageSize));  
            }  
        }  
        else {  
            return data;  
        }  
    }

    public List<Ficha> getFichas() {
        return fichas;
    }

    public void setFichas(List<Ficha> fichas) {
        this.fichas = fichas;
    }


}

このエラーが発生します。

ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/catalogoBiologia].[Faces Servlet]] (http-localhost-127.0.0.1-8080-1) Servlet.service() for servlet Faces Servlet threw exception: java.lang.NullPointerException
    at ec.edu.puce.biologia.model.FichaLazyList.load(FichaLazyList.java:55) [classes:]

55行目はこちら

fichas = fichaDao.encontrarPagina(first, pageSize);

ビュースコープまたはセッションスコープである必要があります.ejbを注入しようとすると何が間違っていますか

4

2 に答える 2

-1

fichas の値が null であるため、fichaDao.encontrarPagina(first, pageSize) が null を返すため、fichaDao のコードと接続する休止状態の設定を確認してください。データベース。

于 2013-05-30T20:35:03.003 に答える