[RESOLVIDO] Problema para renderizar view JSF + PRIMEFACES

Então pessoal, sempre acompanho o GUJ pra poder fortalecer as idéias e ver o que ta sendo usado e recomendado!

ja estou a 3 dias com esse problema, tenho 2 views, 2 beans, um para cada view e passo os dados entre uma e outra com o ELFlash, mas não consigo restaurar os dados na outra view, o OBjeto é configurado corretamente, é atribuido corretamente mas não exibe, queria saber de vocês se tem como me ajudar, eu acho que é algo besta, mas não consegui enxergar:

segue código:

bean processocontroller

[code]/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */
    package com.sdv.controller;

import com.sdv.model.dao.EnderecoDAO;
import com.sdv.model.dao.ProcessoDAO;
import com.sdv.model.entidades.Processo;
import com.sdv.util.Mensagens;
import com.sun.faces.context.flash.ELFlash;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

@ManagedBean(name = “pController”)
@ViewScoped
public class ProcessoController implements Serializable {

private Processo processo;
private Mensagens mensagens;
private String logradouro;

public ProcessoController() {
    mensagens = new Mensagens();
}

@PostConstruct
public void checkExternalParam(){
    if(ELFlash.getFlash().get("processo") != null){
    this.setProcesso((Processo) ELFlash.getFlash().get("processo"));
    ELFlash.getFlash().clear();
    }else {
    this.setProcesso(new Processo());
    }
}

public void novoProcesso() {
    this.processo = new Processo();
}

/**
 * @return the ocorrencia
 */
public Processo getProcesso() {
    return processo;
}

/**
 * @param processo the ocorrencia to set
 */
public void setProcesso(Processo parametro) {
    this.processo = parametro;
}

public void checkAction(ActionEvent evento) {
    if (this.processo.getId() != null) {
        this.atualizar();
    } else {
        this.salvar();
    }

}

public void salvar() {
    this.processo.setProcesso(this.gerarNomeProcesso());
    if (new ProcessoDAO().salvar(getProcesso())) {
        getMensagens().reportar(true, "Processo cadastrado com sucesso");
    } else {
        getMensagens().reportar(false, "Falha ao cadastrar");
    }

}

public void atualizar() {
    if (new ProcessoDAO().alterar(getProcesso())) {
        getMensagens().reportar(true, "Processo cadastrado com sucesso");
    } else {
        getMensagens().reportar(false, "Falha ao cadastrar");
    }
}

public List<Processo> getList() {
    List<Processo> lista = new ProcessoDAO().listaProcesso();
    return lista;
}
//public List<Processo> getList(){}

public List<String> autoCompleteLogradouro(String consulta) {
    EnderecoDAO listaLogradouros = new EnderecoDAO();
    
    List<String> resultados = listaLogradouros.getLogradouroList(consulta);
    return resultados;
}

public void checarBairro() {
    this.processo.setEndereco(new EnderecoDAO().getEndereco(this.logradouro));
}

/**
 * @return the mensagens
 */
public Mensagens getMensagens() {
    return mensagens;
}

/**
 * @param mensagens the mensagens to set
 */
public void setMensagens(Mensagens mensagens) {
    this.mensagens = mensagens;
}

/**
 * @return the logradouro
 */
public String getLogradouro() {
    return logradouro;
}

/**
 * @param logradouro the logradouro to set
 */
public void setLogradouro(String logradouro) {
    this.logradouro = logradouro;
}

private String gerarNomeProcesso() {
   Integer ultimoCodRegistrado = new ProcessoDAO().getLastProcessoID();

   
   StringBuilder montarCodigo = new StringBuilder();
   SimpleDateFormat dataFormatada = new SimpleDateFormat("MM.yyyy");
   montarCodigo.append(ultimoCodRegistrado);
   montarCodigo.append("/");
   montarCodigo.append(dataFormatada.format(this.processo.getDataEntrada()));
   return montarCodigo.toString();
}

}
[/code]

bean pesquisacontroller

[code]/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */
    package com.sdv.controller;

import com.sdv.model.dao.EnderecoDAO;
import com.sdv.model.dao.ProcessoDAO;
import com.sdv.model.entidades.Processo;
import com.sdv.util.Mensagens;
import com.sun.faces.context.flash.ELFlash;
import java.io.Serializable;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;

/**
*

  • @author leandro
    */
    @ManagedBean(name = “pesquisaController”)
    @ViewScoped
    public class PesquisaController implements Serializable {

    private Mensagens mensagens;
    private String nomeProcesso;
    private String nomeBairro;
    private String numeroLogradouro;
    private List listaProcesso;
    private List listaBairros;
    private Processo processoSelecionado;
    private boolean render;

    public PesquisaController() {
    mensagens = new Mensagens();
    }

    public void pesquisaProcessoPorNome(ActionEvent evento) {
    this.setListaProcesso(new ProcessoDAO().getProcessoByName(this.getNomeProcesso()));
    this.setRender(true);
    }

    public void pesquisaProcessoPorBairro(ActionEvent evento) {
    this.setListaProcesso(new ProcessoDAO().getProcessoByBairro(this.getNomeBairro()));
    this.setRender(true);
    }

    public void pesquisaProcessoPorLogradouro(ActionEvent evento) {
    this.setListaProcesso(new ProcessoDAO().getProcessoByLogradouro(this.getNumeroLogradouro()));
    this.setRender(true);
    }

    public final List listarBairros() {
    this.setListaBairros(new EnderecoDAO().getBairroList());
    return this.listaBairros;
    }

    /**

    • @return the mensagens
      */
      public Mensagens getMensagens() {
      return mensagens;
      }

    /**

    • @Metodo que passa o objeto para managed bean
      */
      public String visualizar(){

    ELFlash.getFlash().put(“processo”, processoSelecionado);
    return “/faces/reservado/cadastroprocesso?faces-redirect=true&includeViewParams=true”;
    }
    /**

    • @param mensagens the mensagens to set
      */
      public void setMensagens(Mensagens mensagens) {
      this.mensagens = mensagens;
      }

    /**

    • @return the nomeProcesso
      */
      public String getNomeProcesso() {
      return nomeProcesso;
      }

    /**

    • @param nomeProcesso the nomeProcesso to set
      */
      public void setNomeProcesso(String nomeProcesso) {
      this.nomeProcesso = nomeProcesso;
      }

    /**

    • @return the nomeBairro
      */
      public String getNomeBairro() {
      return nomeBairro;
      }

    /**

    • @param nomeBairro the nomeBairro to set
      */
      public void setNomeBairro(String nomeBairro) {
      this.nomeBairro = nomeBairro;
      }

    /**

    • @return the numeroLogradouro
      */
      public String getNumeroLogradouro() {
      return numeroLogradouro;
      }

    /**

    • @param numeroLogradouro the numeroLogradouro to set
      */
      public void setNumeroLogradouro(String numeroLogradouro) {
      this.numeroLogradouro = numeroLogradouro;
      }

    /**

    • @return the listaProcesso
      */
      public List getListaProcesso() {
      return listaProcesso;
      }

    /**

    • @param listaProcesso the listaProcesso to set
      */
      public void setListaProcesso(List listaProcesso) {
      this.listaProcesso = listaProcesso;
      }

    /**

    • @return the listaBairros
      */
      public List getListaBairros() {
      return listaBairros;
      }

    /**

    • @param listaBairros the listaBairros to set
      */
      public void setListaBairros(List listaBairros) {
      this.listaBairros = listaBairros;
      }

    /**

    • @return the render
      */
      public boolean isRender() {
      return render;
      }

    /**

    • @param render the render to set
      */
      public void setRender(boolean render) {
      this.render = render;
      }

    /**

    • @return the processoSelecionado
      */
      public Processo getProcessoSelecionado() {
      return processoSelecionado;
      }

    /**

    • @param processoSelecionado the processoSelecionado to set
      */
      public void setProcessoSelecionado(Processo processoSelecionado) {
      this.processoSelecionado = processoSelecionado;
      }

}
[/code]

as views de cadastramento/ visualização:
cadastroprocesso.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<!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:p="http://primefaces.org/ui"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core" 
      xmlns:ui="http://java.sun.com/jsf/facelets">

    <ui:include src="/templates/menubar.xhtml" />

    <h:head>
        <title>Vistoria</title>
    </h:head>
    <h:body style="background-color: aliceblue">
        <f:view>


           <p:ajaxStatus onstart="statusDialog.show();" onsuccess="statusDialog.hide();"/>  

            <p:dialog modal="true" widgetVar="statusDialog" header="Status"   
                      draggable="false" closable="false">  
                <p:graphicImage value="/design/ajaxloadingbar.gif" />  
            </p:dialog>  

            <div id="divCentro" style="margin-left :-400px;">
                <h:form id="form" prependId="false">
                    <p:panel id="panel">
                        <p:messages id="messages" showDetail="true" autoUpdate="true" />
                        <p:panelGrid columns="2">
                            <f:facet name="header">
                                <h1>Cadastro de Processos</h1>
                            </f:facet>
                            <p:column>
                                <p:panelGrid columns="2">
                                    <h:outputLabel for="processo" value="Nome:"/>
                                    <p:inputText id="processo" value="#{pController.processo.processo}" label="Nome do Processo" disabled="true"/>
                                    <h:outputLabel for="dataEntrada" value="Data de Entrada:"/>
                                    <p:calendar id="dataEntrada" value="#{pController.processo.dataEntrada}" navigator="true" pattern="dd/MM/yyyy" />
                                    <h:outputLabel for="resultadosLogradouro" value="Nº Logradouro:"/>
                                    <p:row>
                                        <p:inputText id="resultadosLogradouro" value="#{pController.logradouro}"/>
                                        <p:commandButton id="botaoChecarBairro" value="Checar Bairro" actionListener="#{pController.checarBairro}" update="panel" style="width:20;height:1;"/>
                                    </p:row>
                                    <h:outputLabel for="bairro" value="Bairro:"/>
                                    <p:inputText id="bairro" value="#{pController.processo.endereco.bairro}" disabled="true"/>
                                    <h:outputLabel for="rua" value="Rua:"/>
                                    <p:inputText id="rua" value="#{pController.processo.endereco.rua}" disabled="true"/>
                                </p:panelGrid>
                            </p:column>
                            <p:column>
                                <p:panelGrid columns="2">
                                    <h:outputLabel for="assunto" value="Assunto:"/>
                                    <p:inputText id="assunto" value="#{pController.processo.assunto}" label="Orgão do Processo"/>
                                    <h:outputLabel for="interessado" value="Interessado:"/>
                                    <p:inputText id="interessado" value="#{pController.processo.interessado}" label="Orgão do Processo"/>
                                    <h:outputLabel for="valor" value="Valor:"/>
                                    <p:inputText id="valor" value="#{pController.processo.valor}" label="Orgão do Processo" />
                                    <h:outputLabel for="tecnico" value="Técnico:"/>
                                    <p:inputText id="tecnico" value="#{pController.processo.tecnico}" label="Orgão do Processo"/>
                                    <h:outputLabel for="dataSaida" value="Data de Saida:"/>
                                    <p:calendar id="dataSaida" value="#{pController.processo.dataSaida}" navigator="true" pattern="dd/MM/yyyy" />
                                </p:panelGrid>
                            </p:column>
                        </p:panelGrid>
                        <f:facet name="footer">
                            <p:commandButton id="botaoSalvar" value="Validar" actionListener="#{pController.checkAction}"/>
                            <p:commandButton id="botaoVoltar" value="Voltar" action="#{central.redirectTOmenu()}" />
                        </f:facet>
                    </p:panel>

                </h:form>
            </div>
        </f:view>
    </h:body>
</html>[/code]

view de pesquisa que tem 1 command link que envia os dados pelo flash
pesquisarprocesso.xhtml

[code]<?xml version="1.0" encoding="UTF-8"?>
<!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:p="http://primefaces.org/ui"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core" 
      xmlns:ui="http://java.sun.com/jsf/facelets">

    <ui:include src="/templates/menubar.xhtml" />
    <h:body style="background-color: aliceblue">
        <f:view>
            <div id="divCentro">
                <h:form id="formMensagens">
                    <p:messages id="messages" showDetail="true" autoUpdate="true" />    
                </h:form>
            </div>
            <div id="divConsultaProcesso" class="divCentro">
                <h:form id="formConsultaProcesso">
                    <p:panelGrid columns="1">
                        <p:row>
                            <p:outputLabel for="processo" value="Código do processo:"/>
                            <p:inputText id="processo" value="#{pesquisaController.nomeProcesso}" label="nome"/>
                            <p:commandButton id="botaoProcessoPorNome" value="Pesquisar" update="panelListaProcesso" actionListener="#{pesquisaController.pesquisaProcessoPorNome}"  />
                        </p:row>
                        <p:row>
                            <p:outputLabel for="bairro" value="Bairro:               "/>
                            <p:selectOneMenu id="bairro" value="#{pesquisaController.nomeBairro}" effect="fade">  
                                <f:selectItem itemLabel="Selecione" itemValue="" />  
                                <f:selectItems value="#{pesquisaController.listarBairros()}"/>  
                            </p:selectOneMenu>
                            <p:commandButton id="botaoProcessoPorBairro" value="Pesquisar" update="panelListaProcesso" actionListener="#{pesquisaController.pesquisaProcessoPorBairro}"  />
                        </p:row>
                        <p:row>
                            <p:outputLabel for="logradouro" value="Logradouro: "/>
                            <p:inputText id="logradouro" value="#{pesquisaController.numeroLogradouro}" label="nome"/>
                            <p:commandButton id="botaoProcessoPorlogradouro" value="Pesquisar" update="panelListaProcesso" actionListener="#{pesquisaController.pesquisaProcessoPorLogradouro}"  />
                        </p:row>
                    </p:panelGrid>

                    <p:outputPanel id="panelListaProcesso">  
                        <p:dataTable var="processo" value="#{pesquisaController.listaProcesso}" id="tabelaProcesso" tableStyle="width:auto"  rendered="#{pesquisaController.render}" 
                                     paginator="true" rows="10"  
                                     paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"  
                                     rowsPerPageTemplate="5,10,15">
                            <p:column headerText="Processo" filterBy="#{processo.processo}" filterMatchMode="contains" id="processo">
                                
                                <h:inputHidden id="id" value="#{processo.id}"/>
                                <h:commandLink value="#{processo.processo}" action="#{pesquisaController.visualizar()}" >
                                    <f:setPropertyActionListener value="#{processo}" target="#{pesquisaController.processoSelecionado}" />
                                </h:commandLink>
                            </p:column>  
                            <p:column headerText="Data Entrada" filterBy="#{processo.dataEntrada}" filterMatchMode="contains" id="orgao">  
                                <h:outputText value="#{processo.dataEntrada}" >
                                    <f:convertDateTime pattern="dd/MM/yyyy"/>                                
                                </h:outputText>    
                            </p:column>  
                            <p:column headerText="Bairro" id="bairro">  
                                <h:outputText value="#{processo.endereco.bairro}" />  
                            </p:column>
                        </p:dataTable> 
                    </p:outputPanel>
                </h:form>
            </div>
        </f:view>
    </h:body>
</html>

facesconfig

[code]<?xml version="1.0" encoding="UTF-8"?>

[/code]

web xml

[code]<?xml version="1.0" encoding="UTF-8"?>

<context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Development</param-value>
</context-param>
<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<session-config>
    <session-timeout>
        30
    </session-timeout>
</session-config>
<welcome-file-list>
    <welcome-file>faces/index.xhtml</welcome-file>
</welcome-file-list>
[/code]

ja dei uma debugada no codigo, o parametro pelo flash ta ok, mais não tem santo que faça renderizar o objeto atualizado na tela cadastroprocesso.xhtml
ajuda ai pessoal! não queria usar sessionscoped, com o session eu faço isso em 2 tapas.

o problema está com os 2 beans? está na pagina? alguem da uma ajuda!!!

Opa leandro cara se achar alguma coisa relacionada a isso manda ai, mas no meu ver so @Session mesmo.

com @sessionscope é tranquilo resolver, mais o ideal é utilizar o recurso somente quando solicitado, e nisso o sessionscope não resolve, teria de ser @viewscope

é como eu falei, os dados são passados pro MB, testei isso no debug, mais não sei como fazer isso aparecer na tela.

Resolvi ler o codigo todo denovo, tem uma parte que não foi postada aqui. que tinha isso:

menubar.xhtml

[code]<?xml version="1.0" encoding="UTF-8"?>

<h:head/>
<h:body>
    <h:form>
        <f:view>
            <p:graphicImage id="imagen" value="/imagens/logo.PNG" width="100%" height="110px"/>    
        </f:view>
        <p:growl id="messages" showDetail="false" showSummary="false"/> 
        <p:menubar id="menubar"> 
            <p:menuitem value="Home" ajax="false" icon="ui-icon-close" url="/faces/index.xhtml" />  
            <p:submenu label="Processo" icon="ui-icon-document">
                <p:menuitem id="menuprocesso" value="Novo Processo" ajax ="false" icon="ui-icon-document" 
                            onclick="#{pController.novoProcesso()};" action="#{central.redirectTOcadastroProcesso()}"/>
            </p:submenu>
            <p:menuitem value="Consultas" icon="ui-icon-document" url="/faces/reservado/pesquisarprocesso.xhtml"/>
            
        </p:menubar>  
    </h:form>
</h:body>    
[/code]

este<p:menuitem id="menuprocesso" value="Novo Processo" ajax ="false" icon="ui-icon-document" onclick="#{pController.novoProcesso()};" action="#{central.redirectTOcadastroProcesso()}"/>
era o câncer, pois eu começei como @sessionscope, então toda vez que o usuário quisesse cadastrar um novo processo, o onclick instanciava um novo processo e com isso ficava ok
então resolvi por recomendação de muitos usar o @viewscope, e ai, o bean ja era feito nesse include acima, então quando ele renderizava a page cadastroprocesso.xhtml ele realmente não exibiria os dados pois ja tinha instanciado, eu precisaria re-renderizar a pagina, e teria mais trabalho, então tirei o onclick deixando assim:

<p:menuitem id="menuprocesso" value="Novo Processo" ajax ="false" icon="ui-icon-document" action="#{central.redirectTOcadastroProcesso()}"/>

agora ele instancia o MB em cadastroprocesso e não mais em menubar, tinha certeza que era uma besteira!

@mixcleiton pode usar dessa forma ai que funciona que é uma beleza o pessoal usa o @conversationscope e outros ai do CODI e seam, mais como o jsf ja deixa disponivel o ELFlash, que você pode armazenar teus objetos então não é necessário injetar outras coisas em seu projeto, a não ser que seja necessário.