1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Problema para inicializar container Spring

Galera é o seguinte, tenho uma arquitetura que funciona bem, porém estou precisando da uma melhorada nela por motivos de produtividade. Problema é que eu tenho uma classe de controle (Bean) e um método inciar, que é chamado para carregar a página. Se eu for utilizar ele tudo funciona corretamente, porém agora estou precisando acabar com esse método e iniciar minha classe no construtor, porém ao fazer isso meus @Autowire não funcionam. Segue um exemplo:

Classe com problema:

@ManagedBean("ListarClientesBean")
@Controller
@Scope("session")
public class ListarClientesBean extends AbstractListarBean<Cliente>
{
    @Autowired
    ClienteBO clienteBO;

    private EditarClientesBean editarClientesBean;

    public ListarClientesBean()
    {
        // na classe AbstractListarBean o construtor executa o beforeLoadPage
    }

    @Override
    protected void beforeLoadPage()
    {
        // meu BO vem sempre null
        if (clienteBO != null)
        {
            this.selectedEntity = new Cliente();
            this.listaEntidade = clienteBO.getListClientes();
        }
    }

    public String iniciar()
    {
        // Este era o método que eu usava para inicializar a página e chamar o xhtml dela, nela o BO vem cerinho

        FacesContext facesContext = FacesContext.getCurrentInstance();
        editarClientesBean = (EditarClientesBean) facesContext.getApplication().createValueBinding("#{EditarClientesBean}").getValue(facesContext);

        this.selectedEntity = new Cliente();
        this.listaEntidade = clienteBO.getListClientes();

        escolheColunas();

        if (this.dataTableListar != null)
        {
            this.dataTableListar.setFirst(0);
        }

        return "ListarClientes";
    }

    @Override
    protected void escolheColunas()
    {
        super.escolheColunas();

        this.colunasEscolhidas.add(new PojoColunasDataTable("nome", "Nome"));
        this.colunasEscolhidas.add(new PojoColunasDataTable("email", "e-mail"));
        this.colunasEscolhidas.add(new PojoColunasDataTable("cpf", "cpf"));
        this.colunasEscolhidas.add(new PojoColunasDataTable("telefonePreferencial", "Telefone Preferencial"));
        this.colunasEscolhidas.add(new PojoColunasDataTable("telefoneSecundario", "Telefone Secundário"));

        criaColunas(Cliente.class);
    }

    @Override
    public String aposCadastro(Cliente clienteIncluido)
    {
        this.listaEntidade = clienteBO.getListClientes();
        this.selectedEntity = clienteIncluido;
        this.dataTableListar.setFirst((this.dataTableListar.getPageCount() * this.dataTableListar.getRows()) + 1);
        return "ListarClientes";
    }

    @Override
    public void removerEntidade()
    {
        try
        {
            this.clienteBO.removeEntity(selectedEntity);
            this.listaEntidade = clienteBO.getListClientes();
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "SUCESSO", "O Cliente " + selectedEntity.getNome() + " foi excluído com sucesso!"));
            this.selectedEntity = new Cliente();
        }
        catch (Exception e)
        {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "ERRO", e.getMessage()));
        }
        RequestContext.getCurrentInstance().update(this.formListar.getId());
    }

    @Override
    public String novaEntidade()
    {
        return editarClientesBean.iniciarCadastro();
    }

    @Override
    public String editarEntidade()
    {
        return editarClientesBean.iniciarEdicao();
    }

    public void EventoMudarLinhaDataTable()
    {
    }

    public void EventoMudarPaginaDataTable()
    {
        this.selectedEntity = new Cliente();
        RequestContext.getCurrentInstance().update(this.formListar.getId() + ":" + this.dataTableListar.getId());
    }
}

Creio que meu container JSF está iniciando antes do Sprng, alguem saberia como resolver?


  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java web web.xml spring primefaces spring-mvc controller jpa jsf ou faça a sua própria pergunta.