Problema com selectonemenu dinamico[RESOLVIDO]

Java

30/05/2013

E ae pessoal, boa tarde, td certo ? seguinte eu estou com um problema em meu selectonemenu, gostaria de preencher o componente de acordo com o que for selecionado em meu outro selectonemenu, para isso coloquei no evento "valueChangeListener" do primeiro componente um metodo que limpa a lista do outro selectonemenu e busca novamente os itens para preencher, mas não esta acontecendo nada, estou usando facelets e nessa pagina resolvi colocar uma tag em ajax so pra recarregar o componente que vai mudar, é a primeira vez que uso ajax, pegei uma explicação bem simples de como usar, segue o codigo aew: VendaMain.xhtml:
<h:selectOneMenu value="#{VendaMain.empresaSelecionada}"
                             valueChangeListener="#{VendaMain.PreencherClientes}"
                             converter="ConversorEmpresa"
                             id="cbxEmpresa">
                <f:selectItem itemLabel="Todos" itemValue="#"/>
                <f:selectItems value="#{VendaMain.listaEmpresas}"
                               var="empresas"
                               itemValue="#"
                               itemLabel="#{empresas.nome}"/>
                <f:ajax render="cbxCliente" event="valueChange"/>
            </h:selectOneMenu>
            <h:outputLabel value="Clientes :" for="lblCliente" id="lblCliente"/>
            <h:selectOneMenu value="#{VendaMain.clienteSelecionado}"
                             converter="ConversorCliente"
                             required="true" requiredMessage="Selecione um cliente"
                             id="cbxCliente">
                <f:selectItem itemLabel="Selecione um cliente" itemValue="#"/>
                <f:selectItems value="#{VendaMain.listaClientes}"
                               var="clientes"
                               itemValue="#"
                               itemLabel="#{clientes.nome}"/>
            </h:selectOneMenu>
            <h:message for="lblTelefone" errorStyle="color : red"/>
metodo que limpa o list do selectonemenu de clientes e o preenche novamente se achar registros:
public void PreencherClientes(ValueChangeEvent event){
        this.listaClientes.clear();
        Empresa empresa = (Empresa)event.getNewValue();
        if (empresa != null){
            Cliente condicaoRetorno = new Cliente();
            condicaoRetorno.setEmpresa(new Empresa());
            condicaoRetorno.setEmpresa(empresa);
            try {
                this.listaClientes = this.persistenciaCliente.selecionarClientesEmpresas(condicaoRetorno);
            } catch (Throwable ex) {
            }
        }else{
            try{
                this.listaClientes = this.persistenciaCliente.selecionar();
            }catch(Throwable ex){
                
            }
        }
    }
eu verifiquei se nenhum momento estou recebendo uma excessão, quanto a isso o metodo esta ok, acredito que o problema esta msm na pagina jsf vlw aew
José Junior

José Junior

Curtidas 0

Respostas

Okabe Rintarou

Okabe Rintarou

30/05/2013

Da uma olhada nesses 2 posts, podem te ajudar: http://javafree.uol.com.br/topic-889814-Erro-com-Managed-Bean.html http://javafree.uol.com.br/topic-889547-Resolvido-Duvida-gt-Select-HQL.html
GOSTEI 0
José Junior

José Junior

30/05/2013

kra os links ajudaram um poco, fiz umas modificações e fico assim os componentes
<h:selectOneMenu value="#{VendaMain.empresaSelecionada}"
                             converter="ConversorEmpresa"
                             id="cbxEmpresa">
                <f:selectItem itemLabel="Todos" itemValue="#"/>
                <f:selectItems value="#{VendaMain.listaEmpresas}"
                               var="empresas"
                               itemValue="#"
                               itemLabel="#{empresas.nome}"/>
                <f:ajax render="cbxCliente" event="valueChange" listener="#{VendaMain.PreencherClientes}"/>
            </h:selectOneMenu>
            <h:outputLabel value="Clientes :" for="lblCliente" id="lblCliente"/>
            <h:selectOneMenu value="#{VendaMain.clienteSelecionado}"
                             converter="ConversorCliente"
                             required="true" requiredMessage="Selecione um cliente"
                             id="cbxCliente">
                <f:selectItem itemLabel="Selecione um cliente" itemValue="#"/>
                <f:selectItems value="#{VendaMain.listaClientes}"
                               var="clientes"
                               itemValue="#"
                               itemLabel="#{clientes.nome}"/>
            </h:selectOneMenu>
agora ele recarrega o selectonemenu de clientes, mas ele não esta limpando o componente e preenchendo com outros itens ou deixando vazio so com o item fixo definido nele <f:ajax render="cbxCliente" event="valueChange" listener="#{VendaMain.PreencherClientes}"/> notei que em um dos links q você mandou a tag d ajax era de outra biblioteca, acredito que primefaces, tinha um atributo update que me parece que nessa é o render, enfim acredito que já caminhei um poco nisso, to precisando fazer ele limpar o componente agora para receber os novos valores que vem do arraylist
GOSTEI 0
Okabe Rintarou

Okabe Rintarou

30/05/2013

Verdade, o update é do Primefaces. Vc está usando JSF Puro. Esses links com combos aninhados pode te ajudar: https://weblogs.java.net/blog/lamineba/archive/2011/05/12/implementing-cascading-dropdown-jsf-2-0 http://uaihebert.com/?p=669 http://javasemcafe.blogspot.com.br/2011/03/jsf-20-ajax-nativo.html
GOSTEI 0
José Junior

José Junior

30/05/2013

Kra consegui resolver, agora entendi meu erro, eu precisava usar o metodo ligado ao componente para refazer a minha select segue meu codigo modificado:
<h:selectOneMenu value="#{VendaMain.empresaSelecionada}"
                             converter="ConversorEmpresa"
                             id="cbxEmpresa">
                <f:selectItem itemLabel="Todos" itemValue="#"/>
                <f:selectItems value="#{VendaMain.listaEmpresas}"
                               var="empresas"
                               itemValue="#"
                               itemLabel="#{empresas.nome}"/>
                <f:ajax render="cbxCliente" event="change"/>
            </h:selectOneMenu>
            <h:outputLabel value="Clientes :" for="lblCliente" id="lblCliente"/>
            <h:selectOneMenu value="#{VendaMain.clienteSelecionado}"
                             converter="ConversorCliente"
                             required="true" requiredMessage="Selecione um cliente"
                             id="cbxCliente">
                <f:selectItem itemLabel="Selecione um cliente" itemValue="#"/>
                <f:selectItems value="#{VendaMain.listaClientes}"
                               var="clientes"
                               itemValue="#"
                               itemLabel="#{clientes.nome}"/>
            </h:selectOneMenu>
esse é o metodo ligado ao meu selectonemenu que troca de acordo com a seleção do primeiro
public Cliente getClienteSelecionado() {
        this.listaClientes.clear();
        Empresa empresa = this.empresaSelecionada;
        if (empresa != null){
            Cliente condicaoRetorno = new Cliente();
            condicaoRetorno.setEmpresa(new Empresa());
            condicaoRetorno.setEmpresa(empresa);
            try {
                this.listaClientes = this.persistenciaCliente.selecionarClientesEmpresas(condicaoRetorno);
            } catch (Throwable ex) {
            }
        }else{
            try{
                this.listaClientes = this.persistenciaCliente.selecionar();
            }catch(Throwable ex){
                
            }
        }
        return this.clienteSelecionado;
    }
kra vlw aew mais uma vez pela ajuda, pra fechar o topico gostaria de mais 2 coisas. A primeira seria para o caso de minha aplicação começar a trabalhar com muitos dados, isso iria exigir mais tempo para processar o componente, então gostaria de saber como posso implantar um recurso que já vi em muitos sites que quando a pagina ou um componente esta carregando alguma coisa, aparecer uma mensagem de "carregando" e essa mensagem inibir a tela toda até que seja totalmente processada. A segunda seria mesmo uma dica que estou precisando, a pagina seguinte dessa pagina que estou trabalhando agora é onde vou adicionar os itens para a venda que serão exibidos na tela para o usuário, até ai tudo certo, gostaria de saber qual a estrutura de dados mais indicada para o meu problema, o arraylist não resolve porque na tela você ficar adicionando, removendo e modificando os produtos da lista , isso vai gerar espaços em branco no array e eu ficar organizando o array toda hora vai fazer o desempenho do sistema cair muito, pensei em usar um linkedlist, o que vcs acham? tem alguma estrutura de dados melhor para me indicar?
GOSTEI 0
Okabe Rintarou

Okabe Rintarou

30/05/2013

Para o item 1, pesquise sobre jsf.ajax.addOnEvent: http://www.mif.vu.lt/~donatas/PSArchitekturaProjektavimas/Library/JSF/AjaxStatusIndicator.pdf https://javaserverfaces.java.net/nonav/docs/2.0/jsdocs/symbols/jsf.ajax.html#.addOnEvent http://jamesgdriscoll.wordpress.com/2010/02/09/busy-status-indicator-with-jsf-2/ Já o item 2, um ArrayList não é um Array. O ArrayList encapsula o Array, por isso vc não precisa se preocupar com espaços vazios. Mas se você for fazer muitas buscas, de uma lida nesse artigo: http://blog.caelum.com.br/performance-hashset-em-vez-de-arraylist/
GOSTEI 0
José Junior

José Junior

30/05/2013

kra segui a dica do primeiro link que você me mandou:
<h:outputScript name="espera.js" library="javax.faces" target="head" />
            <h:outputLabel value="Empresas :" for="lblEmpresa" id="lblEmpresa"/>
            <h:selectOneMenu value="#{VendaMain.empresaSelecionada}"
                             converter="ConversorEmpresa"
                             id="cbxEmpresa">
                <f:selectItem itemLabel="Todos" itemValue="#"/>
                <f:selectItems value="#{VendaMain.listaEmpresas}"
                               var="empresas"
                               itemValue="#"
                               itemLabel="#{empresas.nome}"/>
                <f:ajax render="cbxCliente" event="change"/>
            </h:selectOneMenu>
            <h:outputLabel value="Clientes :" for="lblCliente" id="lblCliente"/>
            <h:selectOneMenu value="#{VendaMain.clienteSelecionado}"
                             converter="ConversorCliente"
                             required="true" requiredMessage="Selecione um cliente"
                             id="cbxCliente">
                <f:selectItem itemLabel="Selecione um cliente" itemValue="#"/>
                <f:selectItems value="#{VendaMain.listaClientes}"
                               var="clientes"
                               itemValue="#"
                               itemLabel="#{clientes.nome}"/>
            </h:selectOneMenu>
e crieri um arquivo javascritp no meu resources:
if (!window["busystatus"]) {
    var busystatus = {};
}
busystatus.onStatusChange = function onStatusChange(data) {
    var status = data.status;
    alert("ajax event triggered");
    if (status === "begin") { // turn on busy indicator
        element.style.display = "inline";
    } else { // turn off busy indicator, on either "complete" or "success"
        document.body.style.cursor = 'default';
    }
};
jsf.ajax.addOnEvent(busystatus.onStatusChange);
se eu deixo do jeito que foi passado no link ele não funciona e não acha a referencia do arquivo javascript
<h:outputScript name="espera.js" library="javax.faces" target="head" />
agora se eu aponto para o meu resources ele simplismente para de executar a minha rotina de pegar do banco os clientes cadastrados e recarregar no meu select one menu
<h:outputScript name="espera.js" library="js" target="head" />
GOSTEI 0
Okabe Rintarou

Okabe Rintarou

30/05/2013

Estranho, vou fazer uns testes aqui. Vai pesquisando também.
GOSTEI 0
José Junior

José Junior

30/05/2013

to pesquisando aqui cara, mas o material que to achando é sempre referente ao richfaces, icefaces, primefaces, to começando a me sentir arcaico por usar jsf puro rsrs, tudo usando jsf puro parece mais chatinho de arrumar, acho que no proximo projeto que eu for fazer em jsf vo escolher algum desses que sitei, pelo menos esse projeto até que tá indo bem como meu primeiro projeto usando jsf e ta servindo para aprende
GOSTEI 0
Okabe Rintarou

Okabe Rintarou

30/05/2013

[quote="juniorkun"]to pesquisando aqui cara, mas o material que to achando é sempre referente ao richfaces, icefaces, primefaces, to começando a me sentir arcaico por usar jsf puro rsrs, tudo usando jsf puro parece mais chatinho de arrumar, acho que no proximo projeto que eu for fazer em jsf vo escolher algum desses que sitei, pelo menos esse projeto até que tá indo bem como meu primeiro projeto usando jsf e ta servindo para aprende
Não dá para usar o PrimeFaces nesse projeto?
GOSTEI 0
José Junior

José Junior

30/05/2013

então cara é como falei este projeto estou usando para aprender, não eh nd assim que eu tenha que usar facelets, comecei por facelets porque achei que deveria ir do básico e talz, mas ok acho que vou ter mesmo que usar algum extra então, você esta me recomendando o primer faces, mas por curiosidade existe um melhor entre primer faces, ice faces e rich faces? ou é mais cada um se encaixa melhor em um determinado projeto ou até mesmo uma questão de gosto ? e vc tem algum ex ae para me mandar no prime faces que você esta falando pra usar ?
GOSTEI 0
Okabe Rintarou

Okabe Rintarou

30/05/2013

[quote="juniorkun"]então cara é como falei este projeto estou usando para aprender, não eh nd assim que eu tenha que usar facelets, comecei por facelets porque achei que deveria ir do básico e talz, mas ok acho que vou ter mesmo que usar algum extra então, você esta me recomendando o primer faces, mas por curiosidade existe um melhor entre primer faces, ice faces e rich faces? ou é mais cada um se encaixa melhor em um determinado projeto ou até mesmo uma questão de gosto ? e vc tem algum ex ae para me mandar no prime faces que você esta falando pra usar ?
Eu gosto do Primefaces, mas não vejo problemas no RichFaces. Em relação a exemplos: http://www.primefaces.org/showcase/ui/ajaxStatusScript.jsf;jsessionid=1r0lz1jqrykjrpk6besg54cp5 Pesquise o ajaxStatus. Mesmo assim, vou tentar também com JSF puro. Estou curioso para ver se realmente funciona.
GOSTEI 0
José Junior

José Junior

30/05/2013

adaptei minha tela usando o primefaces, funcionou o busy status, só que o meu validador esta bloqueando o meu selectonemenu, eu troco a opção, ele carrega e o validador ativa e volta o selectonemenu para a primeira opção, sendo que o validador so deve ativar quando eu clicar em meu commandbutton, como posso arrumar isso ?
GOSTEI 0
Okabe Rintarou

Okabe Rintarou

30/05/2013

[quote="juniorkun"]adaptei minha tela usando o primefaces, funcionou o busy status, só que o meu validador esta bloqueando o meu selectonemenu, eu troco a opção, ele carrega e o validador ativa e volta o selectonemenu para a primeira opção, sendo que o validador so deve ativar quando eu clicar em meu commandbutton, como posso arrumar isso ?
A priori eu não sei, teria como postar o código da página com o Primefaces e o validador?
GOSTEI 0
José Junior

José Junior

30/05/2013

o codigo da pagina :
<h:body>
        <p:ajaxStatus onstart="statusDialog.show();" onsuccess="statusDialog.hide();"/> 
        <p:dialog modal="true" widgetVar="statusDialog" header="Carregando ..."   
            draggable="false" closable="false">  
            <p:graphicImage name="progressbar.gif" library="icones"/>  
        </p:dialog>
        <h:form id="FormVenda">
            <p:panel id="panel"> 
                <h:panelGrid columns="3" cellpadding="5"> 
                    <f:metadata>
                            <f:event type="preRenderView" listener="#{VendaMain.CarregarTela}"/>
                    </f:metadata>

                    <h:outputLabel value="Empresas :" for="lblEmpresa" id="lblEmpresa"/>
                    <p:selectOneMenu value="#{VendaMain.empresaSelecionada}"
                                     converter="ConversorEmpresa"
                                     id="cbxEmpresa">
                        <f:selectItem itemLabel="Todos" itemValue="#"/>
                        <f:selectItems value="#{VendaMain.listaEmpresas}"
                                       var="empresas"
                                       itemValue="#"
                                       itemLabel="#{empresas.nome}"/>
                        <p:ajax process="cbxCliente" event="change" update="panel"/>
                    </p:selectOneMenu>
                    <br></br>
                    <h:outputLabel value="Clientes :" for="lblCliente" id="lblCliente"/>
                    <p:selectOneMenu value="#{VendaMain.clienteSelecionado}"
                                     converter="ConversorCliente"
                                     required="true" requiredMessage="Selecione um cliente"
                                     id="cbxCliente">
                        <f:selectItem itemLabel="Selecione um cliente" itemValue="#"/>
                        <f:selectItems value="#{VendaMain.listaClientes}"
                                       var="clientes"
                                       itemValue="#"
                                       itemLabel="#{clientes.nome}"/>
                    </p:selectOneMenu>
                    <p:message for="cbxCliente" />
                    <p:commandButton value="Vender" action="#{VendaMain.AbrirVenda}" 
                                     onclick='javascript:return confirm("Deseja realmente abrir uma nova venda ?");'/>
                </h:panelGrid>
            </p:panel>
        </h:form>
        <h:outputLink value="Index.xhtml">Menu principal</h:outputLink>
    </h:body>
GOSTEI 0
José Junior

José Junior

30/05/2013

o que pode ser ?
GOSTEI 0
Okabe Rintarou

Okabe Rintarou

30/05/2013

Agora que vc está usando o Primefaces, veja esse exemplo: http://www.primefaces.org/showcase/ui/pprSelect.jsf
GOSTEI 0
José Junior

José Junior

30/05/2013

então kra até aew eu consegui fazer, já funciona o busy status da minha pagina, o problema agora é com meu validador, quando eu troco a seleção da empresa o validador da cidade ativa, gostaria que o validador so verificasse quando eu apertasse o botão d pagina
GOSTEI 0
Okabe Rintarou

Okabe Rintarou

30/05/2013

[quote="juniorkun"]então kra até aew eu consegui fazer, já funciona o busy status da minha pagina, o problema agora é com meu validador, quando eu troco a seleção da empresa o validador da cidade ativa, gostaria que o validador so verificasse quando eu apertasse o botão d pagina
Não entendi. Que validador de cidade é esse?
GOSTEI 0
José Junior

José Junior

30/05/2013

nessa minha tela eu pesquiso por um cliente que pode ou não trabalhar para alguma empresa, o combobox de empresa é para facilitar a localização do cliente, logo ele não é um campo obrigatório, o cliente tem que estar selecionado, porque a próxima tela vai receber o cliente selecionado para associar os produtos pra ele e assim gerar uma venda
GOSTEI 0
Okabe Rintarou

Okabe Rintarou

30/05/2013

[quote="juniorkun"]nessa minha tela eu pesquiso por um cliente que pode ou não trabalhar para alguma empresa, o combobox de empresa é para facilitar a localização do cliente, logo ele não é um campo obrigatório, o cliente tem que estar selecionado, porque a próxima tela vai receber o cliente selecionado para associar os produtos pra ele e assim gerar uma venda
Hum.... acho que entendi. Poste o código do ManagedBean, só para dar uma olhada e ver como esta.
GOSTEI 0
José Junior

José Junior

30/05/2013

kra malz a demora aew pra posta é q eu tive uns problemas aki e talz, mas segue aew enfim o eu codigo
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.br.Beans;

import com.br.Classes.Cliente;
import com.br.Classes.Empresa;
import com.br.Persistencia.ClienteBD;
import com.br.Persistencia.EmpresaBD;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.enterprise.context.SessionScoped;
import javax.faces.context.FacesContext;
import javax.inject.Named;
import javax.servlet.http.HttpSession;


@Named("VendaMain")
@SessionScoped
public class VendaMainBean implements Serializable{
    private Empresa empresaSelecionada;
    private Cliente clienteSelecionado = new Cliente();
    private List<Empresa> listaEmpresas = new ArrayList<Empresa>();
    private List<Cliente> listaClientes = new ArrayList<Cliente>();
    private EmpresaBD persistenciaEmpresa = new EmpresaBD();
    private ClienteBD persistenciaCliente = new ClienteBD();
    
    public void CarregarTela(){
        
        try{
            this.listaEmpresas = persistenciaEmpresa.selecionar();
            this.listaClientes = persistenciaCliente.selecionar();
        }catch(Throwable ex){
            
        }
    }
    
    public Empresa getEmpresaSelecionada() {
        return empresaSelecionada;
    }

    public void setEmpresaSelecionada(Empresa empresaSelecionada) {
        this.empresaSelecionada = empresaSelecionada;
    }

    public Cliente getClienteSelecionado() {
        this.listaClientes.clear();
        Empresa empresa = this.empresaSelecionada;
        if (empresa != null){
            Cliente condicaoRetorno = new Cliente();
            condicaoRetorno.setEmpresa(new Empresa());
            condicaoRetorno.setEmpresa(empresa);
            try {
                this.listaClientes = this.persistenciaCliente.selecionarClientesEmpresas(condicaoRetorno);
            } catch (Throwable ex) {
            }
        }else{
            try{
                this.listaClientes = this.persistenciaCliente.selecionar();
            }catch(Throwable ex){
                
            }
        }
        return this.clienteSelecionado;
    }

    public void setClienteSelecionado(Cliente clienteSelecionado) {
        this.clienteSelecionado = clienteSelecionado;
    }

    public void PreencherClientes(){
        
        
    }
    
    public List<Empresa> getListaEmpresas() {
        return listaEmpresas;
    }

    public void setListaEmpresas(List<Empresa> listaEmpresas) {
        this.listaEmpresas = listaEmpresas;
    }

    public List<Cliente> getListaClientes() {
        return listaClientes;
    }

    public void setListaClientes(List<Cliente> listaCliente) {
        this.listaClientes = listaCliente;
    }
    
    public String AbrirVenda(){
        HttpSession sessaoVenda = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
        sessaoVenda.setAttribute("VendaSessao", this.clienteSelecionado);
        return "VendaAbrir.xhtml";
    }
    
}
GOSTEI 0
Okabe Rintarou

Okabe Rintarou

30/05/2013

Vc está dizendo que o método getClienteSelecionado só pode ser invocado no pressionamento do botão, e não durante a seleção?
GOSTEI 0
José Junior

José Junior

30/05/2013

não cara, é o seguinte, ele tem que ser chamado mesmo quando eu troco o item do selectonemenu de empresas, só que o meu validador esta bloqueando o metodo java chamado pelo ajax de rodar alegando que preciso selecionar um cliente, eu quero fazer o validador ativar somente se eu aperta o botão, o validador que impede opção nula no meu selectonemenu de clientes
GOSTEI 0
Okabe Rintarou

Okabe Rintarou

30/05/2013

Ah, tah... esse trecho aqui:
required="true" requiredMessage="Selecione um cliente"
Não daria para deixar ele opcional, e no pressionamento do botão, verificar se o atributo do cliente não está vazio ou inválido?
GOSTEI 0
José Junior

José Junior

30/05/2013

ta falando pra eu não usar o validador pra verificar o campo? e sim verificar no código ?
GOSTEI 0
Okabe Rintarou

Okabe Rintarou

30/05/2013

[quote="juniorkun"]ta falando pra eu não usar o validador pra verificar o campo? e sim verificar no código ?
Sim. Faça assim. Cara, estou programando algumas páginas JSF no trampo. E lhe digo, só na tentativa e erro, e muita busca na net para fazer esse trem funcionar... rs
GOSTEI 0
José Junior

José Junior

30/05/2013

entendi, acho que vai ter que ser isso mesmo para poder funcionar, só pra fechar cara, como vou ter que fazer validação via código essa validação vai ficar diferente das outras paginas, gostaria de saber se tem como fazer a minha mensagem de validação aparecer em um alert em javascript, que assim vou poder deixar as mensagens iguais
GOSTEI 0
Okabe Rintarou

Okabe Rintarou

30/05/2013

Da uma olhada no confirmDialog: http://www.primefaces.org/showcase/ui/confirmDialog.jsf
GOSTEI 0
José Junior

José Junior

30/05/2013

kra tah quase resolvido meu problema, agora preciso fazer o seguinte, pegar o valor de meu selectonemenu sem ter que recarrega-lo, se eu colocar pra recarregar no meu metodo ajax, ele volta o selectonemenu pro primeiro item, preciso de uma forma de pegar o valor trocado na pagina, só que a pagina não é recarregada quando faço a troca do item e sim o selectonemenu de clientes
GOSTEI 0
Okabe Rintarou

Okabe Rintarou

30/05/2013

[quote="juniorkun"]kra tah quase resolvido meu problema, agora preciso fazer o seguinte, pegar o valor de meu selectonemenu sem ter que recarrega-lo, se eu colocar pra recarregar no meu metodo ajax, ele volta o selectonemenu pro primeiro item, preciso de uma forma de pegar o valor trocado na pagina, só que a pagina não é recarregada quando faço a troca do item e sim o selectonemenu de clientes
Vc quer pegar o valor do selectonemenu no ManagedBean ou na página?
GOSTEI 0
José Junior

José Junior

30/05/2013

preciso pegar no ManagedBean
GOSTEI 0
José Junior

José Junior

30/05/2013

preciso fazer isso pra rodar esse codigo aqui :

this.listaClientes.clear();
        Empresa empresa =  this.empresaSelecionada;
        if (empresa != null){
            Cliente condicaoRetorno = new Cliente();
            condicaoRetorno.setEmpresa(new Empresa());
            condicaoRetorno.setEmpresa(empresa);
            try {
                this.listaClientes = this.persistenciaCliente.selecionarClientesEmpresas(condicaoRetorno);
            } catch (Throwable ex) {
            }
        }else{
            try{
                this.listaClientes = this.persistenciaCliente.selecionar();
            }catch(Throwable ex){
                
            }
        }

só que do jeito que esta como a pagina não foi submetida o valor da empresa sempre vai ser null
GOSTEI 0
Okabe Rintarou

Okabe Rintarou

30/05/2013

[quote="juniorkun"]preciso pegar no ManagedBean
Mas aqui:
 <p:selectOneMenu value="#{VendaMain.empresaSelecionada}"  
                                     converter="ConversorEmpresa"  
                                     id="cbxEmpresa">  
                        <f:selectItem itemLabel="Todos" itemValue="#"/>  
                        <f:selectItems value="#{VendaMain.listaEmpresas}"  
                                       var="empresas"  
                                       itemValue="#"  
                                       itemLabel="#{empresas.nome}"/>  
                        <p:ajax process="cbxCliente" event="change" update="panel"/>  
                    </p:selectOneMenu>  
A propriedade empresaSelecionada não contem o valor?
GOSTEI 0
José Junior

José Junior

30/05/2013

sim sim, mas o que acontece é o seguinte, acesso a pagina a primeira vez, ele vai ficar com o valor null, troco o item selecionado no meu selectonemenu, só que meu evento ajax esta programado para mexer com o selectonemenu de cliente, so ele sera recarregado, então a informação de que alterei a seleção na empresa não é passada e a variavel ainda fica com o valor null, pelo menos é isso que esta acontecendo comigo aqui, tem alguma forma de eu puxar esse valor sem dar submit na pagina ?
GOSTEI 0
Okabe Rintarou

Okabe Rintarou

30/05/2013

Boa pergunta. Tente com valueChangeListener : http://www.mkyong.com/jsf2/jsf-2-valuechangelistener-example/ Se não der certo, use a propriedade binding do jsf e faça um teste. Procure por HtmlSelectOneMenu
GOSTEI 0
José Junior

José Junior

30/05/2013

kra usei a ideia do HtmlSelectOneMenu fiz o metodo get e set, no metodo set coloquei meu codigo que puxa os clientes do banco, mas ainda não deu certo
public void setCbxEmpresa(HtmlSelectOneMenu cbxEmpresa) {
        this.cbxEmpresa = cbxEmpresa;
        this.listaClientes.clear();
        Empresa empresa =  ((Empresa) cbxEmpresa.getValue());
        if (empresa != null){
            Cliente condicaoRetorno = new Cliente();
            condicaoRetorno.setEmpresa(new Empresa());
            condicaoRetorno.setEmpresa(empresa);
            try {
                this.listaClientes = this.persistenciaCliente.selecionarClientesEmpresas(condicaoRetorno);
            } catch (Throwable ex) {
            }
        }else{
            try{
                this.listaClientes = this.persistenciaCliente.selecionar();
            }catch(Throwable ex){
                
            }
        }
    }
GOSTEI 0
Okabe Rintarou

Okabe Rintarou

30/05/2013

[quote="juniorkun"]kra usei a ideia do HtmlSelectOneMenu fiz o metodo get e set, no metodo set coloquei meu codigo que puxa os clientes do banco, mas ainda não deu certo
public void setCbxEmpresa(HtmlSelectOneMenu cbxEmpresa) {
        this.cbxEmpresa = cbxEmpresa;
        this.listaClientes.clear();
        Empresa empresa =  ((Empresa) cbxEmpresa.getValue());
        if (empresa != null){
            Cliente condicaoRetorno = new Cliente();
            condicaoRetorno.setEmpresa(new Empresa());
            condicaoRetorno.setEmpresa(empresa);
            try {
                this.listaClientes = this.persistenciaCliente.selecionarClientesEmpresas(condicaoRetorno);
            } catch (Throwable ex) {
            }
        }else{
            try{
                this.listaClientes = this.persistenciaCliente.selecionar();
            }catch(Throwable ex){
                
            }
        }
    }
Vou fazer um teste aqui. Pesquise por: FacesMessage - getRequestMap
GOSTEI 0
José Junior

José Junior

30/05/2013

cara achei meu problema, era algo muito muito idiota, o selectonemenu dinamico esta funcionando sem nenhum problema, o que ferrou com meu codigo foram essas linhas aqui :
<f:metadata>
                            <f:event type="preRenderView" listener="#{VendaMain.CarregarTela}"/>
                    </f:metadata>
public void CarregarTela(){
        
        try{
            this.listaEmpresas = persistenciaEmpresa.selecionar();
            this.listaClientes = persistenciaCliente.selecionar();
        }catch(Throwable ex){
            
        }
    }
esse carregar tela estava programado para executar na hora em que a pagina fosse chamada, só que eu percebi que dpois da minha requisição ajax ele caia nesse trecho também como se a pagina estivesse sendo chamada novamente, como posso resolver isso ? preciso que esse codigo só ocorra quando eu chamar a pagina a partir do hiperlink da anterior, matando isso meu problema esta resolvido
GOSTEI 0
Okabe Rintarou

Okabe Rintarou

30/05/2013

[quote="juniorkun"]cara achei meu problema, era algo muito muito idiota, o selectonemenu dinamico esta funcionando sem nenhum problema, o que ferrou com meu codigo foram essas linhas aqui :
<f:metadata>
                            <f:event type="preRenderView" listener="#{VendaMain.CarregarTela}"/>
                    </f:metadata>
public void CarregarTela(){
        
        try{
            this.listaEmpresas = persistenciaEmpresa.selecionar();
            this.listaClientes = persistenciaCliente.selecionar();
        }catch(Throwable ex){
            
        }
    }
esse carregar tela estava programado para executar na hora em que a pagina fosse chamada, só que eu percebi que dpois da minha requisição ajax ele caia nesse trecho também como se a pagina estivesse sendo chamada novamente, como posso resolver isso ? preciso que esse codigo só ocorra quando eu chamar a pagina a partir do hiperlink da anterior, matando isso meu problema esta resolvido
Seu ManagedBean está com qual escopo de visão?
GOSTEI 0
José Junior

José Junior

30/05/2013

Estou usando SessionScoped pra td no projeto
GOSTEI 0
Okabe Rintarou

Okabe Rintarou

30/05/2013

Não entendi. O método CarregarTela() está sendo chamado quando?
GOSTEI 0
José Junior

José Junior

30/05/2013

ele é chamado quando eu entro na pagina, até ae tudo ok porque ele tem que preencher os selectonemenus, depois ele é chamado quando o ajax termina de recarregar os selectonemenus, isso não pode acontecer, o metodo tem que ser chamado somente quando eu entro na página e não mais.
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.br.Beans;

import com.br.Classes.Cliente;
import com.br.Classes.Empresa;
import com.br.Persistencia.ClienteBD;
import com.br.Persistencia.EmpresaBD;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.FacesMessage;
import javax.faces.component.html.HtmlSelectOneMenu;
import javax.faces.context.FacesContext;
import javax.inject.Named;
import javax.servlet.http.HttpSession;


@Named("VendaMain")
@SessionScoped
public class VendaMainBean implements Serializable{
    private Empresa empresaSelecionada;
    private Cliente clienteSelecionado = new Cliente();
    private List<Empresa> listaEmpresas = new ArrayList<Empresa>();
    private List<Cliente> listaClientes = new ArrayList<Cliente>();
    private EmpresaBD persistenciaEmpresa = new EmpresaBD();
    private ClienteBD persistenciaCliente = new ClienteBD();
    private HtmlSelectOneMenu cbxEmpresa;
    
    public void CarregarTela(){
        
        try{
            this.listaEmpresas = persistenciaEmpresa.selecionar();
            this.listaClientes = persistenciaCliente.selecionar();
        }catch(Throwable ex){
            
        }
    }
    
    public void PegarClientes (){
        this.listaClientes.clear();
        if (this.empresaSelecionada != null){
            Cliente condicaoRetorno = new Cliente();
            condicaoRetorno.setEmpresa(new Empresa());
            condicaoRetorno.setEmpresa(this.empresaSelecionada);
            try {
                this.listaClientes = this.persistenciaCliente.selecionarClientesEmpresas(condicaoRetorno);
            } catch (Throwable ex) {
            }
        }else{
            try{
                this.listaClientes = this.persistenciaCliente.selecionar();
            }catch(Throwable ex){
                
            }
        }
    }
    
    public Empresa getEmpresaSelecionada() {
        return empresaSelecionada;
    }

    public void setEmpresaSelecionada(Empresa empresaSelecionada) {
        this.empresaSelecionada = empresaSelecionada;
    }
       
    public Cliente getClienteSelecionado() {
        return this.clienteSelecionado;
    }

    public void setClienteSelecionado(Cliente clienteSelecionado) {
        this.clienteSelecionado = clienteSelecionado;
    }

    public void PreencherClientes(){
        
        
    }
    
    public List<Empresa> getListaEmpresas() {
        return listaEmpresas;
    }

    public void setListaEmpresas(List<Empresa> listaEmpresas) {
        this.listaEmpresas = listaEmpresas;
    }

    public List<Cliente> getListaClientes() {
        return listaClientes;
    }

    public void setListaClientes(List<Cliente> listaCliente) {
        this.listaClientes = listaCliente;
    }
    
    public String AbrirVenda(){
        String retorno;
        if (this.clienteSelecionado == null){
            retorno = "";
            FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Selecione um cliente", "" );
            FacesContext.getCurrentInstance().addMessage(null, message);
        }else{
            HttpSession sessaoVenda = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
            sessaoVenda.setAttribute("VendaSessao", this.clienteSelecionado);
            retorno = "VendaAbrir.xhtml";
        }
        return retorno;
    }
    
}

GOSTEI 0
Okabe Rintarou

Okabe Rintarou

30/05/2013

Entendi. Tive o mesmo problema recentemente. Há 2 formas de resolver isso ( que eu conheça). 1) Na primeira chamada a página, não há atributos de request. Ou seja, você pode validar se há parametros presentes:
    public static boolean hasRequestParameter() {
        return FacesContext.getCurrentInstance().getExternalContext().getRequestParameterNames().hasNext();
    }
Se não houver, significa que é a primeira chamada. As chamadas subsequentes, dentro da própria página, terão argumentos, e o método irá detectar isso.
GOSTEI 0
José Junior

José Junior

30/05/2013

cara fiz uns testes com esse método que você me passou, mas ele esta sempre retornando true, tanto quando entro na página como também quando troco a seleção do meu selectonemenu, será que fiz algo errado aqui ?

package com.br.Beans;

import com.br.Classes.Cliente;
import com.br.Classes.Empresa;
import com.br.Persistencia.ClienteBD;
import com.br.Persistencia.EmpresaBD;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Named;
import javax.servlet.http.HttpSession;


@Named("VendaMain")
@SessionScoped
public class VendaMainBean implements Serializable{
    private Empresa empresaSelecionada;
    private Cliente clienteSelecionado = new Cliente();
    private List<Empresa> listaEmpresas = new ArrayList<Empresa>();
    private List<Cliente> listaClientes = new ArrayList<Cliente>();
    private EmpresaBD persistenciaEmpresa = new EmpresaBD();
    private ClienteBD persistenciaCliente = new ClienteBD();
    
    public void CarregarTela(){
        if (hasRequestParameter()){
            try{
                this.listaEmpresas = persistenciaEmpresa.selecionar();
                this.listaClientes = persistenciaCliente.selecionar();
            }catch(Throwable ex){

            }
        }
    }
    
    public static boolean hasRequestParameter() {  
        return FacesContext.getCurrentInstance().getExternalContext().getRequestParameterNames().hasNext();  
    }  
    
    public void PegarClientes (){
        this.listaClientes.clear();
        if (this.empresaSelecionada != null){
            Cliente condicaoRetorno = new Cliente();
            condicaoRetorno.setEmpresa(new Empresa());
            condicaoRetorno.setEmpresa(this.empresaSelecionada);
            try {
                this.listaClientes = this.persistenciaCliente.selecionarClientesEmpresas(condicaoRetorno);
            } catch (Throwable ex) {
            }
        }else{
            try{
                this.listaClientes = this.persistenciaCliente.selecionar();
            }catch(Throwable ex){
                
            }
        }
    }
    
    public Empresa getEmpresaSelecionada() {
        return empresaSelecionada;
    }

    public void setEmpresaSelecionada(Empresa empresaSelecionada) {
        this.empresaSelecionada = empresaSelecionada;
    }
       
    public Cliente getClienteSelecionado() {
        return this.clienteSelecionado;
    }

    public void setClienteSelecionado(Cliente clienteSelecionado) {
        this.clienteSelecionado = clienteSelecionado;
    }

    public void PreencherClientes(){
        
        
    }
    
    public List<Empresa> getListaEmpresas() {
        return listaEmpresas;
    }

    public void setListaEmpresas(List<Empresa> listaEmpresas) {
        this.listaEmpresas = listaEmpresas;
    }

    public List<Cliente> getListaClientes() {
        return listaClientes;
    }

    public void setListaClientes(List<Cliente> listaCliente) {
        this.listaClientes = listaCliente;
    }
    
    public String AbrirVenda(){
        String retorno;
        if (this.clienteSelecionado == null){
            retorno = "";
            FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Selecione um cliente", "" );
            FacesContext.getCurrentInstance().addMessage(null, message);
        }else{
            HttpSession sessaoVenda = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
            sessaoVenda.setAttribute("VendaSessao", this.clienteSelecionado);
            retorno = "VendaAbrir.xhtml";
        }
        return retorno;
    }
    
}
<?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:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
        <title>Agenda Web - Venda</title>
    </h:head>
    <h:body>
        <p:ajaxStatus onstart="statusDialog.show();" onsuccess="statusDialog.hide();"/> 
        <p:dialog modal="true" widgetVar="statusDialog" header="Carregando ..." width="250"  
                  draggable="false" closable="false">  
            <p:graphicImage name="progressbar.gif" library="icones"/>  
        </p:dialog>
        <h:form id="FormVenda">
            <p:growl id="messages" /> 
            <p:panel id="panel"> 
                <h:panelGrid columns="3" cellpadding="5"> 
                    <f:metadata>
                            <f:event type="preRenderView" listener="#{VendaMain.CarregarTela}"/>
                    </f:metadata>

                    <h:outputLabel value="Empresas :" for="lblEmpresa" id="lblEmpresa"/>
                    <p:selectOneMenu value="#{VendaMain.empresaSelecionada}"
                                     valueChangeListener="#{VendaMain.PegarClientes}"
                                     converter="ConversorEmpresa"
                                     id="cbxEmpresa">
                        <f:selectItem itemLabel="Todos" itemValue="#"/>
                        <f:selectItems value="#{VendaMain.listaEmpresas}"
                                       var="empresas"
                                       itemValue="#"
                                       itemLabel="#{empresas.nome}"/>
                        <p:ajax process="cbxEmpresa, cbxCliente" event="change" update="cbxEmpresa, cbxCliente" listener="#{VendaMain.PegarClientes}"/>
                    </p:selectOneMenu>
                    <br></br>
                    <h:outputLabel value="Clientes :" for="lblCliente" id="lblCliente"/>
                    <p:selectOneMenu value="#{VendaMain.clienteSelecionado}"
                                     converter="ConversorCliente"
                                     id="cbxCliente">
                        <f:selectItem itemLabel="Selecione um cliente" itemValue="#"/>
                        <f:selectItems value="#{VendaMain.listaClientes}"
                                       var="clientes"
                                       itemValue="#"
                                       itemLabel="#{clientes.nome}"/>
                    </p:selectOneMenu>
                    <p:commandButton value="Abrir Venda" action="#{VendaMain.AbrirVenda}" update="messages"
                                     onclick='javascript:return confirm("Deseja realmente abrir uma nova venda ?");'/>
                </h:panelGrid>
            </p:panel>
        </h:form>
        <h:outputLink value="Index.xhtml">Menu principal</h:outputLink>
    </h:body>
</html>


GOSTEI 0
Okabe Rintarou

Okabe Rintarou

30/05/2013

Entendo. Minha estratégia só funcionaria se você estivesse chamando o link "por fora". Como a primeira chamada está dentro de:
    <f:metadata>  
                                <f:event type="preRenderView" listener="#{VendaMain.CarregarTela}"/>  
                        </f:metadata>  
Já haverá parametros. Cara, faça o seguinte (teste): 1) Crie um campo oculto. (inputHidden) e sete um valor, tipo 0. 2) No evento onLoad do body, vc seta o valor do inputHidden para 1. (via javascript); Veja, entre uma ação e outra o CarregarTela será invocado. Nas próximas invocações o inputHidden estará com valor 1 e ai vc valida isso e não executa mais a busca. Ou seja, na primeira chamada, o valor será 0. Depois que a página for carregada no cliente, um evento javascript irá alterar o valor para 1, e nas próximas chamadas AJAX dentro da página, o valor será sempre 1.
GOSTEI 0
José Junior

José Junior

30/05/2013

deu certinho aqui cara, vlw a força, segue o código:
<?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:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
        <title>Agenda Web - Venda</title>
    </h:head>
    <h:body>
        <p:ajaxStatus onstart="statusDialog.show();" onsuccess="statusDialog.hide();"/> 
        <p:dialog modal="true" widgetVar="statusDialog" header="Carregando ..." width="250"  
                  draggable="false" closable="false">  
            <p:graphicImage name="progressbar.gif" library="icones"/>  
        </p:dialog>
        <h:form id="FormVenda">
            <h:inputHidden value="#{VendaMain.status}" id="status"/>
            <p:growl id="messages" /> 
            <p:panel id="panel"> 
                <h:panelGrid columns="3" cellpadding="5"> 
                    <f:metadata>
                            <f:event type="preRenderView" listener="#{VendaMain.CarregarTela}"/>
                    </f:metadata>

                    <h:outputLabel value="Empresas :" for="lblEmpresa" id="lblEmpresa"/>
                    <p:selectOneMenu value="#{VendaMain.empresaSelecionada}"
                                     valueChangeListener="#{VendaMain.PegarClientes}"
                                     converter="ConversorEmpresa"
                                     id="cbxEmpresa">
                        <f:selectItem itemLabel="Todos" itemValue="#"/>
                        <f:selectItems value="#{VendaMain.listaEmpresas}"
                                       var="empresas"
                                       itemValue="#"
                                       itemLabel="#{empresas.nome}"/>
                        <p:ajax process="cbxEmpresa, cbxCliente" event="change" update="cbxEmpresa, cbxCliente" listener="#{VendaMain.PegarClientes}"/>
                    </p:selectOneMenu>
                    <br></br>
                    <h:outputLabel value="Clientes :" for="lblCliente" id="lblCliente"/>
                    <p:selectOneMenu value="#{VendaMain.clienteSelecionado}"
                                     converter="ConversorCliente"
                                     id="cbxCliente">
                        <f:selectItem itemLabel="Selecione um cliente" itemValue="#"/>
                        <f:selectItems value="#{VendaMain.listaClientes}"
                                       var="clientes"
                                       itemValue="#"
                                       itemLabel="#{clientes.nome}"/>
                    </p:selectOneMenu>
                    <p:commandButton value="Abrir Venda" action="#{VendaMain.AbrirVenda}" update="messages"
                                     onclick='javascript:return confirm("Deseja realmente abrir uma nova venda ?");'/>
                </h:panelGrid>
            </p:panel>
        </h:form>
        <h:outputLink value="Index.xhtml">Menu principal</h:outputLink>
    </h:body>
</html>


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

import com.br.Classes.Cliente;
import com.br.Classes.Empresa;
import com.br.Persistencia.ClienteBD;
import com.br.Persistencia.EmpresaBD;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Named;
import javax.servlet.http.HttpSession;


@Named("VendaMain")
@SessionScoped
public class VendaMainBean implements Serializable{
    private Empresa empresaSelecionada;
    private Cliente clienteSelecionado = new Cliente();
    private List<Empresa> listaEmpresas = new ArrayList<Empresa>();
    private List<Cliente> listaClientes = new ArrayList<Cliente>();
    private EmpresaBD persistenciaEmpresa = new EmpresaBD();
    private ClienteBD persistenciaCliente = new ClienteBD();
    private String Status;
    private final String ACESSADO = "1";
    
    public void CarregarTela(){
        if (this.Status == null){
            try{
                this.Status = ACESSADO;
                this.listaEmpresas = persistenciaEmpresa.selecionar();
                this.listaClientes = persistenciaCliente.selecionar();
            }catch(Throwable ex){

            }
        }
    }
    
    public void PegarClientes (){
        this.listaClientes.clear();
        if (this.empresaSelecionada != null){
            Cliente condicaoRetorno = new Cliente();
            condicaoRetorno.setEmpresa(new Empresa());
            condicaoRetorno.setEmpresa(this.empresaSelecionada);
            try {
                this.listaClientes = this.persistenciaCliente.selecionarClientesEmpresas(condicaoRetorno);
            } catch (Throwable ex) {
            }
        }else{
            try{
                this.listaClientes = this.persistenciaCliente.selecionar();
            }catch(Throwable ex){
                
            }
        }
    }
    
    public Empresa getEmpresaSelecionada() {
        return empresaSelecionada;
    }

    public void setEmpresaSelecionada(Empresa empresaSelecionada) {
        this.empresaSelecionada = empresaSelecionada;
    }
       
    public Cliente getClienteSelecionado() {
        return this.clienteSelecionado;
    }

    public void setClienteSelecionado(Cliente clienteSelecionado) {
        this.clienteSelecionado = clienteSelecionado;
    }

    public void PreencherClientes(){
        
        
    }
    
    public List<Empresa> getListaEmpresas() {
        return listaEmpresas;
    }

    public void setListaEmpresas(List<Empresa> listaEmpresas) {
        this.listaEmpresas = listaEmpresas;
    }

    public List<Cliente> getListaClientes() {
        return listaClientes;
    }

    public void setListaClientes(List<Cliente> listaCliente) {
        this.listaClientes = listaCliente;
    }
    
    public String AbrirVenda(){
        String retorno;
        if (this.clienteSelecionado == null){
            retorno = "";
            FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Selecione um cliente", "" );
            FacesContext.getCurrentInstance().addMessage(null, message);
        }else{
            HttpSession sessaoVenda = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
            sessaoVenda.setAttribute("VendaSessao", this.clienteSelecionado);
            retorno = "VendaAbrir.xhtml";
        }
        return retorno;
    }

    public String getStatus() {
        return Status;
    }

    public void setStatus(String Status) {
        this.Status = Status;
    }
    
}

GOSTEI 0
Okabe Rintarou

Okabe Rintarou

30/05/2013

Show de bola! Parabéns.
GOSTEI 0
POSTAR