为什么在页面更改时,带有数据表的Composite Component中的rowSelect事件不起作用?

时间:2013-11-27 01:41:08

标签: jsf-2 primefaces datatable composite-component

我的问题很简单:我有一个复合组件,它基本上是一个带有rowSelect事件的延迟加载数据表。当我点击第一页中的任何一行时,该事件会很精彩,但当我更改为另一页时,事件不会像上一页那样设置实体。有没有人经历过这个?

查看:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:f="http://java.sun.com/jsf/core"
  xmlns:ui="http://java.sun.com/jsf/facelets"
 xmlns:componente="http://java.sun.com/jsf/composite/componente"> 

<h:head>
<h:outputStylesheet library="css" name="form.css" />
</h:head> 
<body> 
<h:form id="form">
<h:panelGrid columns="2" border="1">
    <componente:pesquisarPessoas id="teste" 
    value="#{bean.entidadeSelecionada}"  
    listener="#{bean.listener}"/>
    <f:facet name="footer">
    </f:facet>
</h:panelGrid>
</h:form>

</body> 
</html>

组件基类:

public abstract class ComponentePesquisaGenerico<T> extends UINamingContainer {

private String ordenacao = Constantes.ORDEM_ASCENDENTE.getValor();
private String camposOrdenacao = null;
private boolean carregarDados = true;
private boolean primeiraPagina = false;
private int pageSize = 5;
private int firstRow = 0;

private LazyDataModel<T> lazyModel= new LazyDataModel<T>() {
    private static final long serialVersionUID = 1L;
    private  List<T> result = null;
    @Override
    public void setRowIndex(int rowIndex) {
        if (rowIndex == -1 || getPageSize() == 0) {
            super.setRowIndex(-1);
        } else {
            super.setRowIndex(rowIndex % getPageSize());
        }    
    }

     public T getRowData(String rowKey)
        {
          for (T objeto : this.result) {
            if (objeto.toString().equals(rowKey)) {
              return objeto;
            }
          }
          return null;
        }

        public Object getWrappedData()
        {
          if ((this.result == null) || (!this.result.isEmpty())) {
              carregarDados = Boolean.TRUE;
            this.result = load(0, 5, null, null, null);
          }
          return this.result;
        }


        public Object getRowKey(T row)
        {
          @SuppressWarnings("unused")
        Object valor = getAttributes().get("value");
          valor = row;
          return row;
        }


    @Override
    public List<T> load(int first, int pageSize, String sortField,SortOrder sortOrder,       Map<String, String> filters) {



        result = new ArrayList<T>();
        setRowCount(0);

        if (sortField != null && !sortField.isEmpty()){
            camposOrdenacao = sortField;
            if (sortOrder.equals(SortOrder.ASCENDING)){
                ordenacao = Constantes.ORDEM_ASCENDENTE.getValor();
            } else {
                ordenacao = Constantes.ORDEM_DESCENDENTE.getValor();
            }
        }

        if (carregarDados) {
            if (!primeiraPagina) {
                firstRow = first;
                ResultadoConsultaVO<T> resultado = listarRegistrosParaDataTable();
                result = resultado.getListaDeRegistros();
                setRowCount(resultado.getTotal());
                setWrappedData(result);
            } else {
                primeiraPagina = false;
            }
        }else{
            result = new ArrayList<T>();
        }

        RequestContext.getCurrentInstance().update("pesquisa_listaEstabelecimento");
        return result;
    }
    };

    protected abstract ResultadoConsultaVO<T> listarRegistrosParaDataTable();

    /* gets e sets*/
    }

组件:

@FacesComponent("pesquisarPessoasComponente")
public class PesquisarPessoasComponente extends ComponentePesquisaGenerico<Entidade>{

private UIInput uiCodigo;
private UIInput uiNomeentidade;
private DataTable dataTable;
private Entidade objetoSelecionado;
private EntidadeService entidadeService = new EntidadeService();



@Override
protected ResultadoConsultaVO<Entidade> listarRegistrosParaDataTable() {

    String codigoCnes =(String) getUiCodigo().getValue();
    String nomeFantasia =(String) getUiNomeentidade().getValue();

    return entidadeService.pesquisarEntidade(codigoCnes, nomeFantasia,              getFirstRow(),getPageSize());
}

public void pesquisar(ActionEvent event){
    setCarregarDados(Boolean.TRUE);
}

public void limpar(CloseEvent event){
    setCarregarDados(Boolean.FALSE);
}

public void onRowSelect(SelectEvent event) {
    System.out.println(((Entidade)event.getObject()).getCodigo());
    System.out.println( getObjetoSelecionado().getCodigo());

}

/* gets e sets*/


}

管理bean:

@ManagedBean(name="bean")
@SessionScoped
public class Bean {
private Entidade entidadeSelecionada;


public void listener(){
    //faco alguma coisa com a entidade selecionada;
    System.out.println("Nome Escolhido");
    System.out.println(entidadeSelecionada.getNome());
    }
    /*gets e sets*/
   }

public class EntidadeService {

public ResultadoConsultaVO<Entidade> pesquisarEntidade(String codigo, String nome,Integer inicio,Integer tamanhoPagina){
    if(StringUtils.isBlank(codigo) && StringUtils.isBlank(nome))
        return new ResultadoConsultaVO<Entidade>(criarEntidades().size(),criarEntidades().subList(inicio, (tamanhoPagina+inicio)));

    return null;
}




private List<Entidade> criarEntidades(){
    List<Entidade> entidades = new ArrayList<Entidade>();

    entidades.add(new Entidade("1","Arlette Hayden"));
    entidades.add(new Entidade("2","Scot Goodpasture"));
    entidades.add(new Entidade("3","Shin Hymel"));
    entidades.add(new Entidade("4","Phoebe Mau"));
    entidades.add(new Entidade("5","Dominica Hauff"));
    entidades.add(new Entidade("6","Flor Anker"));
    entidades.add(new Entidade("7","Charlott Morin"));
    entidades.add(new Entidade("8","Tamar Leer"));
    entidades.add(new Entidade("9","Shauna Giraldo"));
    entidades.add(new Entidade("10","Orlando Brennen"));
    entidades.add(new Entidade("11","Nancie Norman"));
    entidades.add(new Entidade("12","Kourtney Luttrell"));
    entidades.add(new Entidade("13","Mila Shankles"));
    entidades.add(new Entidade("14","Lucien Ollison"));
    entidades.add(new Entidade("15","Felisha Burruel"));
    entidades.add(new Entidade("16","Precious Monteiro"));
    entidades.add(new Entidade("17","Clotilde Fishel"));
    entidades.add(new Entidade("18","Tamiko Hardegree"));
    entidades.add(new Entidade("19","Risa Marquette"));
    entidades.add(new Entidade("20","Pa Currington"));
    entidades.add(new Entidade("21","Graig Guardiola"));
    entidades.add(new Entidade("22","Micha Knop"));
    entidades.add(new Entidade("23","Adela Palmeri"));
    entidades.add(new Entidade("24","Keeley Loisel"));
    entidades.add(new Entidade("25","Christal Flynn"));
    entidades.add(new Entidade("26","Dee List"));
    entidades.add(new Entidade("27","Victor Hurst"));
    entidades.add(new Entidade("28","Soo Chadwell"));
    entidades.add(new Entidade("29","Reva Jimerson"));
    entidades.add(new Entidade("30","Jerrica Stolz"));


    return entidades;
}

VO:

public class ResultadoConsultaVO<T> {
  private int total;
  private List<T> listaDeRegistros;

public ResultadoConsultaVO() {

}

public ResultadoConsultaVO(int total, List<T> listaDeRegistros) {
    super();
    this.total = total;
    this.listaDeRegistros = listaDeRegistros;
}
    }

实体:

public class Entidade implements Serializable {


    private static final long serialVersionUID = 1L;

    private String codigo;
    private String nome;



    public Entidade() {
        super();
    }
    public Entidade(String codigo, String nome) {
        super();
        this.codigo = codigo;
        this.nome = nome;
    }
}

- Enum

public enum Constantes {

    ORDEM_ASCENDENTE("ASC"),
    ORDEM_DESCENDENTE("DESC"); 
    private String valor;
    private Constantes(){}  
    private Constantes(String valor){
        this.valor = valor;
    }
    public String getValor() {
        return valor;
    }
}

0 个答案:

没有答案