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;
}
-
@return the mensagens
}
[/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!!!