actionListener não chama managedBean

32 respostas
F

Olá Pessoal tenho um index.xhtml e um managedBean, só que o index.xhtml não está conseguindo chamar o método salvarDados do managedBean.

Código do meu index.xhtml:

<h:form>
<p:panel id=“ondeestamos” header=“geral”>
<h:panelGrid columns=“2”>
<h:outputText value=“Onde estamos: “/>
<p:inputTextArea value=”#{GeralMBean.ondeEstamos}”/>
<p:commandButton value=“Salvar” actionListener="#{GeralMBean.salvarDados}" update=“ondeestamos,display”/>
</h:panelGrid>
</p:panel>
</h:form>

e abaixo o meu Managed Bean

package beans;

import javax.faces.bean.ManagedBean;

@ManagedBean
public class GeralMBean {

private String ondeEstamos;
private String quemSomos;

public GeralMBean() {
}

public String getOndeEstamos() {
    return ondeEstamos;
}

public void setOndeEstamos(String ondeEstamos) {
    this.ondeEstamos = ondeEstamos;
}

public String getQuemSomos() {
    return quemSomos;
}

public void setQuemSomos(String quemSomos) {
    this.quemSomos = quemSomos;
}

public void salvarDados(){

     System.out.print("AQUI É PRA TESTAR VER SE TÁ ENTRANDO NO MÉTODO");
    
}

}

O Interessante é que ele chama os métodos get e set, mas não chama o método salvarDados do bean através do botão…

O que pode está acontecendo?

32 Respostas

C

Bom dia Felipe, você tentou colocar como parâmetro do método salvarDados um ActionEvent?

E

quando se usa o “evento” ActionListener obrigatoriamente seu método temque ter o parametro ActionEvent.

public void salvarDados(ActionEvent evento){

System.out.print(“AQUI É PRA TESTAR VER SE TÁ ENTRANDO NO MÉTODO”);

}

F

erickfm8

Pois é cara eu coloquei o parâmetro, mas ele mesmo assim não chama o método…

e tipo no meu bean tem uns códigos no get e no set que ele chama… não entendi pq ele não chama o método…

F

camarada_du:
Bom dia Felipe, você tentou colocar como parâmetro do método salvarDados um ActionEvent?
tentei sim, mas mesmo assim sem sucesso…

O que eu não entendo, é que tenho um bean de login (LoginBean.java) e ele chama o método efetuarLogin(){} sem problemas…

ha e o scope do meu bean está session.

C

Se vc estiver usando JSF 1.2 ou 2.0 chame o método no action invés do actionListener, eu já passei por problemas assim e isso acabou resolvendo.

J

Cara por um acaso vc ta usando PrimeFaces?
tenta algo como

&lt;p:commandButton value="Salvar" action="#{GeralMBean.salvarDados}" ajax="false" update="ondeestamos,display"/&gt;
C

Felipe, eu vi que vc colocou a anotation @ManagedBean e como você não definiu um nome explicitamente para o bean, ele assume o nome no estilo camelCase, então invés de chamar no xhtml o bean como GeralMBean, chame-o geralMBean.

F

Então cara estou usando o jsf 2.0, posso tentar usar o action?

F

[quote=jweibe]Cara por um acaso vc ta usando PrimeFaces?
tenta algo como

&lt;p:commandButton value="Salvar" action="#{GeralMBean.salvarDados}" ajax="false" update="ondeestamos,display"/&gt;

pois é estou sim usando o primefaces. humm vou tentar no action.

E

É o seguinte, eu estou com este problema tbm, ou vc coloca ajax = false , igual do nosso colega, ou muda para h:command

Eu precisava fazer funcionar com ajax tbm, mais ainda não consegui

Se alguem puder contribuir

F

Então camarada_du eu coloquei a anotation, mas mudei o nome dele no faces-config.xml… cara o que não entendo é que pelo actionListener, ele chama no botão do login.

J

FelipeThi por que vc ta usando @Anotações e ao mesmo tempo está usando faces-config.xml ?

F

então, pq só funcionou com os 2 o meu bean de login…

só preciso ter 1?

E

eu acredito que ele se perde em algumas requisição ajax, meio que “bugs” do prime

J

Por que eu fiz um exemplo aki… e fiz o mapeamento usado so o faces-config.xml!
Com o ajax habilitado e foi de boa…

E

Tente trocar a inicial minúscula nas duas chamadas. Corrigindo uma delas:

<p:inputTextArea value="#{GeralMBean.ondeEstamos}"/>

para

<p:inputTextArea value="#{geralMBean.ondeEstamos}"/>
F

o engraçado é que funcionou ajax no meu LoginBean…

só nesse que não tá funcionando :S

J

Vou postar o código do exemplo que eu fiz aki.

default.xhtml

&lt;f:view&gt;
      &lt;h:form&gt;
           &lt;p:commandButton ajax="true" value="Go" actionListener="#{myBean.myAction}"/&gt;
      &lt;/h:form&gt;
&lt;/f:view&gt;

ManagerBean

public class MyBean {
	public void myAction(ActionEvent event){
		System.out.println("Ação executado com sucesso!");
	}
}

faces-config.xml

&lt;managed-bean&gt;
		&lt;managed-bean-name&gt;myBean&lt;/managed-bean-name&gt;
		&lt;managed-bean-class&gt;managerBean.MyBean&lt;/managed-bean-class&gt;
		&lt;managed-bean-scope&gt;session&lt;/managed-bean-scope&gt;
&lt;/managed-bean&gt;
C

Você falou que ele chama os métodos get e set, eles são da propriedade ondeEstamos? Você pode fazer um teste para ver se está entrando no método da seguinte forma:

<p:commandButton value="Salvar" actionListener="alert('1');#{geralMBean.salvarDados}alert('2');"/>

Dessa forma se gerar 2 mensagem ele está ok.
Se não rolar, coloca outro botão na tela chamando um alert do javascript no evento onclick, se também não exibir o alert, a sua página xhtml está com algum erro.

E

"o engraçado é que funcionou ajax no meu LoginBean…

só nesse que não tá funcionando :S "

Sim comigo tbm funciona em alguns casos, quando vc tem componentes “ajax” diferentes na tela ele pode se “perder” , mais isso é um suposição, porque ainda não achei nenhuma solução

tipo o seu login tem quantos H:form na tela? e a outra tela tem quantos form tbm.

Porem eu precisa de alguma forma conseguir resolver isto tbm

E

Mapeamento por faces-config e por anotações são as mesma coisas

F

Funcionou!

Acho que deu certo aqui

Meu 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:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.prime.com.tr/ui">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <h:form>

        <p:panel id="teste" header="teste">
            <h:panelGrid columns="2">
                <h:outputText value="Quem somos: "/>
                <p:inputText value="#{myBean.quemSomos}"/>
                <p:commandButton id="Salvar" value="Salvar" actionListener="#{myBean.salvarDados}"/>
            </h:panelGrid>
        </p:panel>
            
        </h:form>
    </h:body>
</html>

Meu Bean:

package beans;

public class MyBean {

    private String ondeEstamos;
    private String quemSomos;

    public String getOndeEstamos() {
        return ondeEstamos;
    }

    public void setOndeEstamos(String ondeEstamos) {
        this.ondeEstamos = ondeEstamos;
    }

    public String getQuemSomos() {
        return quemSomos;
    }

    public void setQuemSomos(String quemSomos) {
        this.quemSomos = quemSomos;
    }

    
    public MyBean() {
    }

    public void salvarDados(){
        System.out.print(quemSomos);
        System.out.print(ondeEstamos);
    }

}

Ai deixei o mapeamento só no faces-config.xml e criei a classe com a primeira Letra de cada nome maiúsculo e no faces-config.xml defini e estou chamando com minusculo a primeira letra. Funcionou.

<managed-bean>
    <managed-bean-name>myBean</managed-bean-name>
    <managed-bean-class>beans.MyBean</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
</managed-bean>

Valeu Galera!

Brigado, tava perdido nisso. E Funcionou com ajax.

F

camarada_du

ele só chamou o evento do meu bean, quando eu tirei o Parâmetro ActionEvent.

Porque será?

E

O meu continua não funcionando

F

e como tá o seu erick?

E

FelipeThi, estou com 2 problemas com prime, se você puder me ajudar,

este sobre o commandLink vou postar o código anoite pois não estou com ele agora

este daqui faz umas (2 semanas) e ninguem consegui ajudar;…
http://www.guj.com.br/java/238705-primefaces---trabalhando-com-imagens

E
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!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:p="http://primefaces.prime.com.tr/ui"
      xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
        <title>Cadastro de Album</title>
    </h:head>
    <f:view >
        <h:body>

            <h:form id="frmGridAlbum">
                <p:growl id="menssagensAlbum"
                         life="3000"/>
                <p:dataTable id="dtAlbuns"
                             widgetVar="dtAlbuns"
                             var="album"
                             value="#{albumMB.albuns}"
                             paginator="true"
                             rows="5"
                             selection="#{albumMB.album}"
                             rowSelectListener="#{albumMB.selecionarAlbum}"
                             selectionMode="single"
                             onRowSelectComplete="dlgAlbum.show();"
                             emptyMessage="Nao existe Album cadastrado"
                             style="width:60%"
                             update="frmCadastroAlbum:somCliente, frmCadastroAlbum:itaDescricao, frmCadastroAlbum:dtFotos, frmCadastroAlbum:clkGravar, frmCadastroAlbum:clkAlterar">
                    <p:column sortBy="#{album.id}"
                              filterBy="#{album.id}">
                        <f:facet name="header">
                            <h:outputText value="Id" />
                        </f:facet>
                        <h:outputText value="#{album.id}" />
                    </p:column>
                    <p:column sortBy="#{album.cliente.nome}"
                              filterBy="#{album.cliente.nome}">
                        <f:facet name="header">
                            <h:outputText value="Cliente" />
                        </f:facet>
                        <h:outputText value="#{album.cliente.nome}" />
                    </p:column>
                </p:dataTable>
                <p:panel style="width:59.2%">
                    <p:commandLink id="clkIncluir"
                                   title="Incluir"
                                   oncomplete="dlgAlbum.show()"
                                   action="#{albumMB.incluir}"
                                   update="frmCadastroAlbum:somCliente, frmCadastroAlbum:itaDescricao, frmCadastroAlbum:dtFotos, frmCadastroAlbum:clkGravar, frmCadastroAlbum:clkAlterar">
                        <h:graphicImage url="/imagens/novo.jpg"
                                        style="border:0"/>
                    </p:commandLink>
                    <p:commandLink title="Apagar"
                                   actionListener="#{albumMB.apagar}"
                                   style="margin-left:20px"
                                   update="frmGridAlbum"
                                   oncomplete="dlgAlbum.hide();">
                        <h:graphicImage url="/imagens/apagar.jpg"
                                        style="border:0"/>
                    </p:commandLink>
                    <h:commandLink title="Voltar"
                                   action="#{albumMB.voltar}"
                                   style="margin-left:20px">
                        <h:graphicImage url="/imagens/voltar.jpg"
                                        style="border:0"/>

                    </h:commandLink>
                </p:panel>
            </h:form>
            <h:form id="frmCadastroAlbum">
                <p:dialog id="dlgAlbum"
                          widgetVar="dlgAlbum"
                          header="Album"
                          width="1050"
                          height="550"
                          resizable="true">
                    <h:panelGrid columns="2">
                        <h:outputLabel value="Cliente:"
                                       for="somCliente" />
                        <h:selectOneMenu id="somCliente"
                                         value="#{albumMB.album.cliente.id}"
                                         required="true"
                                         requiredMessage="Informe a descricao"
                                         style="width:284%">
                            <f:selectItems value="#{albumMB.clientes}"
                                           var="cliente"
                                           itemValue="#{cliente.id}"
                                           itemLabel="Cliente: #{cliente.nome} - CPF: #{cliente.cpf}"/>
                        </h:selectOneMenu>
                        <h:outputLabel value="Descricao:"
                                       for="itaDescricao"/>
                        <h:inputTextarea id="itaDescricao"
                                         value="#{albumMB.album.descricao}"
                                         required="true"
                                         requiredMessage="Informe a descricao"
                                         style="width:282%"/>
                    </h:panelGrid>
                    <p:dataTable id="dtFotos"
                                 var="foto"
                                 widgetVar="dtFotos"
                                 value="#{albumMB.fotos}"
                                 scrollable="true"
                                 height="200"
                                 emptyMessage="Nenhuma Foto"
                                 selection="#{albumMB.foto}"
                                 selectionMode="single"
                                 rowSelectListener="#{albumMB.prepararFoto}">
                        <p:column sortBy="#{foto.nome}"
                                  filterBy="#{foto.nome}"
                                  style="width:10%">
                            <f:facet name="header">
                                <h:outputText value="Nome da Foto" />
                            </f:facet>
                            <h:outputText value="#{foto.nome}" />
                        </p:column>
                        <p:column sortBy="#{foto.publicado}"
                                  filterBy="#{foto.publicado}"
                                  style="width:5%">
                            <f:facet name="header">
                                <h:outputText value="Publicada" />
                            </f:facet>
                            <h:selectOneMenu id="somPublicada"
                                             value="#{foto.publicado}">
                                <f:selectItems value="#{albumMB.publicados}"/>
                            </h:selectOneMenu>

                        </p:column>
                        <p:column sortBy="#{foto.dataPublicada}"
                                  filterBy="#{foto.dataPublicada}"
                                  style="width:5%">
                            <f:facet name="header">
                                <h:outputText value="Data da publicação" />
                            </f:facet>
                            <p:calendar id="cldDataFoto"
                                        value="#{foto.dataPublicada}"
                                        readOnlyInputText="true"/>
                        </p:column>

                        <p:column style="width:3%">
                            <f:facet name="header">
                                <h:outputText value="Apagar" />
                            </f:facet>

                            <p:commandLink  id="clkApagarFoto"   // NAO FUNCIONA
                                            title="Apagar Foto"
                                            value="Apagar"
                                            ajax="true"
                                            actionListener="#{albumMB.apagarFoto}"
                                          >
                            
                               
                            </p:commandLink>
                        </p:column>
                    </p:dataTable>
                    <h:panelGrid columns="2">
                        <p:commandLink  id="clkGravar"    // NAO FUNCIONA
                                        title="Gravar"
                                        action="#{albumMB.gravar}"
                                        disabled="#{!empty albumMB.album.id}"
                                        style="margin-right:20px"
                                        update="frmCadastroAlbum:somCliente, frmCadastroAlbum:itaDescricao, frmCadastroAlbum:dtFotos, frmGridAlbum:menssagensAlbum, frmGridAlbum:dtAlbuns">
                            <h:graphicImage url="/imagens/gravar.jpg"
                                            style="border:0"/>
                        </p:commandLink>
                        <p:commandLink id="clkAlterar"
                                       title="Alterar"
                                       action="#{albumMB.alterar}"
                                       disabled="#{empty albumMB.album.id}"
                                       update="frmCadastroAlbum:somCliente, frmCadastroAlbum:itaDescricao, frmCadastroAlbum:dtFotos, frmGridAlbum:menssagensAlbum, frmGridAlbum:dtAlbuns"
                                       style="margin-left:20px"
                                       oncomplete="dlgAlbum.hide();">
                            <h:graphicImage url="/imagens/alterar.bmp"
                                            style="border:0"/>
                        </p:commandLink>
                    </h:panelGrid>
                </p:dialog>
            </h:form>
            <h:form>
             <p:fileUpload id="fudSelecionarFotos"
                                  fileUploadListener="#{albumMB.selecionarFotos}"
                                  multiple="false"
                                  allowTypes="*.jpg;*.png;*.gif;"
                                  description="Images"
                                  update="dtFotos"
                                  auto="true"
                                  label="Selecionar Foto"/>

                   
            </h:form>
        </h:body>
    </f:view>
</html>
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package apresentacao;

import Utilitarios.EntradaSaidaUtil;
import Utilitarios.JSFUtil;
import entidades.Album;
import entidades.Foto;
import entidades.Pessoa;
import entidades.Publicado;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;
import javax.faces.event.ValueChangeEvent;
import negocios.AlbumBO;
import negocios.PessoaBO;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.event.SelectEvent;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;
import org.primefaces.model.UploadedFile;

/**
 *
 * @author emacedo
 */
@ManagedBean(name = "albumMB")
@ViewScoped
public class AlbumMB implements Serializable {

    private AlbumBO albumBO;
    private Album album;
    private List<Album> albuns;
    private Foto foto;
    private List<Foto> fotos;
    private List<Publicado> publicados;
    private List<Pessoa> clientes;
    private PessoaBO clienteBO;

    //Construtor
    public AlbumMB() {
        this.setClienteBO(new PessoaBO());
        this.setAlbumBO(new AlbumBO());
        this.setAlbum(new Album());
        this.setFoto(new Foto());
        this.setFotos(new ArrayList<Foto>());
        this.setPublicados(new ArrayList<Publicado>());
        this.getPublicados().add(Publicado.NAO);
        this.getPublicados().add(Publicado.SIM);
        this.listarClientes();
        this.listar();

    }

    // Get e Set
    public Foto getFoto() {
        return foto;
    }

    public void setFoto(Foto foto) {
        this.foto = foto;
    }

    public List<Publicado> getPublicados() {
        return publicados;
    }

    public void setPublicados(List<Publicado> publicados) {
        this.publicados = publicados;
    }

    public Album getAlbum() {
        return album;
    }

    public void setAlbum(Album album) {
        this.album = album;
    }

    public AlbumBO getAlbumBO() {
        return albumBO;
    }

    public void setAlbumBO(AlbumBO albumBO) {
        this.albumBO = albumBO;
    }

    public List<Album> getAlbuns() {
        return albuns;
    }

    public void setAlbuns(List<Album> albuns) {
        this.albuns = albuns;
    }

    public List<Pessoa> getClientes() {
        return clientes;
    }

    public void setClientes(List<Pessoa> clientes) {
        this.clientes = clientes;
    }

    public PessoaBO getClienteBO() {
        return clienteBO;
    }

    public void setClienteBO(PessoaBO clienteBO) {
        this.clienteBO = clienteBO;
    }

    public List<Foto> getFotos() {
        return fotos;
    }

    public void setFotos(List<Foto> fotos) {
        this.fotos = fotos;
    }

    //Metodos
    public void incluir() {
        this.setAlbum(new Album());
        this.setFotos(new ArrayList<Foto>());
    }

    public String voltar() {
        return "menu";
    }

    public void gravar() {
        try {
            if (this.getFotos().isEmpty()) {
                JSFUtil.enviarMenssagemSucesso("Inclua Foto(s) no Album");
            } else {
                Pessoa cliente = this.getClienteBO().buscarPessoaPorId(this.getAlbum().getCliente().getId());
                this.getAlbum().setCliente(cliente);
                this.getAlbum().setFotos(this.getFotos());
                this.getAlbumBO().gravar(this.getAlbum());
                this.getAlbuns().add(this.getAlbum());
                this.setFotos(new ArrayList<Foto>());
                this.setAlbum(new Album());
                JSFUtil.enviarMenssagemSucesso("Album gravado com sucesso");
            }
        } catch (Exception e) {
            e.printStackTrace();
            JSFUtil.enviarMenssagemErro("Erro ao gravar" + " " + e.getMessage());
        }
    }

    public void alterar() {
        try {
            if (this.getFotos().isEmpty()) {
                JSFUtil.enviarMenssagemSucesso("Inclua Foto(s) no Album");
            } else {
                Integer indice = this.getAlbuns().indexOf(this.getAlbum());
                this.getAlbum().setFotos(this.getFotos());
                this.getAlbumBO().alterar(this.getAlbum());
                this.getAlbuns().remove(this.getAlbum());
                this.getAlbuns().add(indice, this.getAlbum());
                JSFUtil.enviarMenssagemSucesso("Album alterado com sucesso");
            }
        } catch (Exception e) {
            JSFUtil.enviarMenssagemErro("Erro ao alterar" + " " + e.getMessage());
        }

    }

    public void apagar() {
        if (this.getAlbum() == null) {
            JSFUtil.enviarMenssagemAtencao("Selecione um Album na grid");
        } else {
            try {
                this.getAlbumBO().apagar(this.getAlbum());
                this.setFotos(new ArrayList());
                this.getAlbuns().remove(this.getAlbum());
                JSFUtil.enviarMenssagemSucesso("Album apagado com sucesso");
            } catch (Exception e) {
                JSFUtil.enviarMenssagemErro("Erro ao apagar" + " "
                        + e.getMessage());
            }
        }

    }

    private void listar() {
        try {
            this.setAlbuns(this.getAlbumBO().listar());
        } catch (Exception e) {
            e.printStackTrace();
            JSFUtil.enviarMenssagemErro("Erro ao listar");
        }
    }

    private void listarClientes() {
        try {
            this.setClientes(this.getClienteBO().listarClientes());
        } catch (Exception e) {
            e.printStackTrace();
            JSFUtil.enviarMenssagemErro("Erro ao listar Clientes");
        }

    }

    public void selecionarAlbum(SelectEvent evento) {
        System.out.println("tf");
        this.prepararAlteracao();
    }

    private void prepararAlteracao() {
        this.setFotos(this.getAlbum().getFotos());
    }

    public void prepararFoto(SelectEvent evento) {
    }

    public void prepararData(ValueChangeEvent evento) {
        System.out.print("dddd");
        if (this.getFoto().getPublicado().equals(Publicado.SIM)) {
            Date dataAtual = new Date();
            this.getFoto().setDataPublicada(dataAtual);
        } else {
            this.getFoto().setDataPublicada(null);
        }
    }

    public void apagarFoto() {
        if (this.getFoto() == null) {
            JSFUtil.enviarMenssagemAtencao("Selecione uma Foto na grid");
        } else {
            try {
                this.getFotos().remove(this.getFoto());
                JSFUtil.enviarMenssagemSucesso("Foto apagada com sucesso");
            } catch (Exception e) {
                JSFUtil.enviarMenssagemErro("Erro ao apagar" + " "
                        + e.getMessage());
            }
        }

    }

    public void selecionarFoto(ActionEvent e) {
        if (this.getFoto() == null) {
            JSFUtil.enviarMenssagemAtencao("Selecione uma Foto na grid");
        } else {
            String diretorioFoto = "C:" + File.separator + "Desenvolvimento" + File.separator + "Projetos" + File.separator + "Studio" + File.separator + "Projeto" + File.separator + "web" + File.separator + "fotos";
            String nomeFoto = diretorioFoto + File.separator + this.getFoto().getNome();
            try {
                EntradaSaidaUtil.limparDiretorio(diretorioFoto);
                InputStream is = new ByteArrayInputStream(this.foto.getFoto());
                EntradaSaidaUtil.gravarArquivo(nomeFoto, is);
                System.out.println("img foto" + this.getFoto().getNome());
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }

    }

    //Metodos em geral
    public void selecionarFotos(FileUploadEvent event) throws IOException {
        UploadedFile uf = event.getFile();
        String nomeArquivo = uf.getFileName();
        InputStream is = null;
        Foto foto = new Foto();
        try {
            is = uf.getInputstream();
            //Populo o objeto Foto

            foto.setNome(nomeArquivo);
            foto.setFoto(uf.getContents());
            //  foto.setImagem(uf.getInputstream());
            // foto.setImagemStream(new DefaultStreamedContent(uf.getInputstream()));

            fotos.add(foto);
            JSFUtil.enviarMenssagemSucesso("Upload realizado com sucesso.");
        } catch (Exception e) {
            e.printStackTrace();
            JSFUtil.enviarMenssagemErro("Erro ao realizar o Upload.");
        } finally {
            try {
                is.close();
            } catch (IOException ex) {
                ex.printStackTrace();
                JSFUtil.enviarMenssagemErro("Erro ao realizar o Upload.");
            }
        }
    }
}

os botoes que estão marcado “// NAO FUNCIONA” esta comblema.

outra coisa a dtAlbum quando seleciona ela abre um dialog e atualiza alguma coisa , este evento só funciona no mozila.

mais uma coisa rsrsr o p:fileUpload não funciona no moxila pq?

E

Referente ao fileupload coloque o seu form com enctype=“multipart/form-data”.

F

Pessoal resolvi meu problema, no meu sistema lá em casa.

o que estava acontecendo era quando eu tinha a tag jstl <c:if> o código não chamava.

<c:if test="${param.ondeEstamos == 1}">
<h:form>
   <p:panel id="ondeestamos" hearder="Onde estamos">
      <h:panelGrid columns="2">
          <p:inputText value="#{geralBean.ondeEstamos}/>
          <p:commandButton value="Salvar" actionListener="#{geralBean.salvarDados}"/>
      </h:panelGrid>
   </p:panel>
</h:form>
</c:if>

quando tirei as tags JSTL funcionou normal, dai coloquei de novo e não chama, por que será?

F
erickfm8:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!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:p="http://primefaces.prime.com.tr/ui"
      xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
        <title>Cadastro de Album</title>
    </h:head>
    <f:view >
        <h:body>

            <h:form id="frmGridAlbum">
                <p:growl id="menssagensAlbum"
                         life="3000"/>
                <p:dataTable id="dtAlbuns"
                             widgetVar="dtAlbuns"
                             var="album"
                             value="#{albumMB.albuns}"
                             paginator="true"
                             rows="5"
                             selection="#{albumMB.album}"
                             rowSelectListener="#{albumMB.selecionarAlbum}"
                             selectionMode="single"
                             onRowSelectComplete="dlgAlbum.show();"
                             emptyMessage="Nao existe Album cadastrado"
                             style="width:60%"
                             update="frmCadastroAlbum:somCliente, frmCadastroAlbum:itaDescricao, frmCadastroAlbum:dtFotos, frmCadastroAlbum:clkGravar, frmCadastroAlbum:clkAlterar">
                    <p:column sortBy="#{album.id}"
                              filterBy="#{album.id}">
                        <f:facet name="header">
                            <h:outputText value="Id" />
                        </f:facet>
                        <h:outputText value="#{album.id}" />
                    </p:column>
                    <p:column sortBy="#{album.cliente.nome}"
                              filterBy="#{album.cliente.nome}">
                        <f:facet name="header">
                            <h:outputText value="Cliente" />
                        </f:facet>
                        <h:outputText value="#{album.cliente.nome}" />
                    </p:column>
                </p:dataTable>
                <p:panel style="width:59.2%">
                    <p:commandLink id="clkIncluir"
                                   title="Incluir"
                                   oncomplete="dlgAlbum.show()"
                                   action="#{albumMB.incluir}"
                                   update="frmCadastroAlbum:somCliente, frmCadastroAlbum:itaDescricao, frmCadastroAlbum:dtFotos, frmCadastroAlbum:clkGravar, frmCadastroAlbum:clkAlterar">
                        <h:graphicImage url="/imagens/novo.jpg"
                                        style="border:0"/>
                    </p:commandLink>
                    <p:commandLink title="Apagar"
                                   actionListener="#{albumMB.apagar}"
                                   style="margin-left:20px"
                                   update="frmGridAlbum"
                                   oncomplete="dlgAlbum.hide();">
                        <h:graphicImage url="/imagens/apagar.jpg"
                                        style="border:0"/>
                    </p:commandLink>
                    <h:commandLink title="Voltar"
                                   action="#{albumMB.voltar}"
                                   style="margin-left:20px">
                        <h:graphicImage url="/imagens/voltar.jpg"
                                        style="border:0"/>

                    </h:commandLink>
                </p:panel>
            </h:form>
            <h:form id="frmCadastroAlbum">
                <p:dialog id="dlgAlbum"
                          widgetVar="dlgAlbum"
                          header="Album"
                          width="1050"
                          height="550"
                          resizable="true">
                    <h:panelGrid columns="2">
                        <h:outputLabel value="Cliente:"
                                       for="somCliente" />
                        <h:selectOneMenu id="somCliente"
                                         value="#{albumMB.album.cliente.id}"
                                         required="true"
                                         requiredMessage="Informe a descricao"
                                         style="width:284%">
                            <f:selectItems value="#{albumMB.clientes}"
                                           var="cliente"
                                           itemValue="#{cliente.id}"
                                           itemLabel="Cliente: #{cliente.nome} - CPF: #{cliente.cpf}"/>
                        </h:selectOneMenu>
                        <h:outputLabel value="Descricao:"
                                       for="itaDescricao"/>
                        <h:inputTextarea id="itaDescricao"
                                         value="#{albumMB.album.descricao}"
                                         required="true"
                                         requiredMessage="Informe a descricao"
                                         style="width:282%"/>
                    </h:panelGrid>
                    <p:dataTable id="dtFotos"
                                 var="foto"
                                 widgetVar="dtFotos"
                                 value="#{albumMB.fotos}"
                                 scrollable="true"
                                 height="200"
                                 emptyMessage="Nenhuma Foto"
                                 selection="#{albumMB.foto}"
                                 selectionMode="single"
                                 rowSelectListener="#{albumMB.prepararFoto}">
                        <p:column sortBy="#{foto.nome}"
                                  filterBy="#{foto.nome}"
                                  style="width:10%">
                            <f:facet name="header">
                                <h:outputText value="Nome da Foto" />
                            </f:facet>
                            <h:outputText value="#{foto.nome}" />
                        </p:column>
                        <p:column sortBy="#{foto.publicado}"
                                  filterBy="#{foto.publicado}"
                                  style="width:5%">
                            <f:facet name="header">
                                <h:outputText value="Publicada" />
                            </f:facet>
                            <h:selectOneMenu id="somPublicada"
                                             value="#{foto.publicado}">
                                <f:selectItems value="#{albumMB.publicados}"/>
                            </h:selectOneMenu>

                        </p:column>
                        <p:column sortBy="#{foto.dataPublicada}"
                                  filterBy="#{foto.dataPublicada}"
                                  style="width:5%">
                            <f:facet name="header">
                                <h:outputText value="Data da publicação" />
                            </f:facet>
                            <p:calendar id="cldDataFoto"
                                        value="#{foto.dataPublicada}"
                                        readOnlyInputText="true"/>
                        </p:column>

                        <p:column style="width:3%">
                            <f:facet name="header">
                                <h:outputText value="Apagar" />
                            </f:facet>

                            <p:commandLink  id="clkApagarFoto"   // NAO FUNCIONA
                                            title="Apagar Foto"
                                            value="Apagar"
                                            ajax="true"
                                            actionListener="#{albumMB.apagarFoto}"
                                          >
                            
                               
                            </p:commandLink>
                        </p:column>
                    </p:dataTable>
                    <h:panelGrid columns="2">
                        <p:commandLink  id="clkGravar"    // NAO FUNCIONA
                                        title="Gravar"
                                        action="#{albumMB.gravar}"
                                        disabled="#{!empty albumMB.album.id}"
                                        style="margin-right:20px"
                                        update="frmCadastroAlbum:somCliente, frmCadastroAlbum:itaDescricao, frmCadastroAlbum:dtFotos, frmGridAlbum:menssagensAlbum, frmGridAlbum:dtAlbuns">
                            <h:graphicImage url="/imagens/gravar.jpg"
                                            style="border:0"/>
                        </p:commandLink>
                        <p:commandLink id="clkAlterar"
                                       title="Alterar"
                                       action="#{albumMB.alterar}"
                                       disabled="#{empty albumMB.album.id}"
                                       update="frmCadastroAlbum:somCliente, frmCadastroAlbum:itaDescricao, frmCadastroAlbum:dtFotos, frmGridAlbum:menssagensAlbum, frmGridAlbum:dtAlbuns"
                                       style="margin-left:20px"
                                       oncomplete="dlgAlbum.hide();">
                            <h:graphicImage url="/imagens/alterar.bmp"
                                            style="border:0"/>
                        </p:commandLink>
                    </h:panelGrid>
                </p:dialog>
            </h:form>
            <h:form>
             <p:fileUpload id="fudSelecionarFotos"
                                  fileUploadListener="#{albumMB.selecionarFotos}"
                                  multiple="false"
                                  allowTypes="*.jpg;*.png;*.gif;"
                                  description="Images"
                                  update="dtFotos"
                                  auto="true"
                                  label="Selecionar Foto"/>

                   
            </h:form>
        </h:body>
    </f:view>
</html>
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package apresentacao;

import Utilitarios.EntradaSaidaUtil;
import Utilitarios.JSFUtil;
import entidades.Album;
import entidades.Foto;
import entidades.Pessoa;
import entidades.Publicado;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;
import javax.faces.event.ValueChangeEvent;
import negocios.AlbumBO;
import negocios.PessoaBO;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.event.SelectEvent;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;
import org.primefaces.model.UploadedFile;

/**
 *
 * @author emacedo
 */
@ManagedBean(name = "albumMB")
@ViewScoped
public class AlbumMB implements Serializable {

    private AlbumBO albumBO;
    private Album album;
    private List<Album> albuns;
    private Foto foto;
    private List<Foto> fotos;
    private List<Publicado> publicados;
    private List<Pessoa> clientes;
    private PessoaBO clienteBO;

    //Construtor
    public AlbumMB() {
        this.setClienteBO(new PessoaBO());
        this.setAlbumBO(new AlbumBO());
        this.setAlbum(new Album());
        this.setFoto(new Foto());
        this.setFotos(new ArrayList<Foto>());
        this.setPublicados(new ArrayList<Publicado>());
        this.getPublicados().add(Publicado.NAO);
        this.getPublicados().add(Publicado.SIM);
        this.listarClientes();
        this.listar();

    }

    // Get e Set
    public Foto getFoto() {
        return foto;
    }

    public void setFoto(Foto foto) {
        this.foto = foto;
    }

    public List<Publicado> getPublicados() {
        return publicados;
    }

    public void setPublicados(List<Publicado> publicados) {
        this.publicados = publicados;
    }

    public Album getAlbum() {
        return album;
    }

    public void setAlbum(Album album) {
        this.album = album;
    }

    public AlbumBO getAlbumBO() {
        return albumBO;
    }

    public void setAlbumBO(AlbumBO albumBO) {
        this.albumBO = albumBO;
    }

    public List<Album> getAlbuns() {
        return albuns;
    }

    public void setAlbuns(List<Album> albuns) {
        this.albuns = albuns;
    }

    public List<Pessoa> getClientes() {
        return clientes;
    }

    public void setClientes(List<Pessoa> clientes) {
        this.clientes = clientes;
    }

    public PessoaBO getClienteBO() {
        return clienteBO;
    }

    public void setClienteBO(PessoaBO clienteBO) {
        this.clienteBO = clienteBO;
    }

    public List<Foto> getFotos() {
        return fotos;
    }

    public void setFotos(List<Foto> fotos) {
        this.fotos = fotos;
    }

    //Metodos
    public void incluir() {
        this.setAlbum(new Album());
        this.setFotos(new ArrayList<Foto>());
    }

    public String voltar() {
        return "menu";
    }

    public void gravar() {
        try {
            if (this.getFotos().isEmpty()) {
                JSFUtil.enviarMenssagemSucesso("Inclua Foto(s) no Album");
            } else {
                Pessoa cliente = this.getClienteBO().buscarPessoaPorId(this.getAlbum().getCliente().getId());
                this.getAlbum().setCliente(cliente);
                this.getAlbum().setFotos(this.getFotos());
                this.getAlbumBO().gravar(this.getAlbum());
                this.getAlbuns().add(this.getAlbum());
                this.setFotos(new ArrayList<Foto>());
                this.setAlbum(new Album());
                JSFUtil.enviarMenssagemSucesso("Album gravado com sucesso");
            }
        } catch (Exception e) {
            e.printStackTrace();
            JSFUtil.enviarMenssagemErro("Erro ao gravar" + " " + e.getMessage());
        }
    }

    public void alterar() {
        try {
            if (this.getFotos().isEmpty()) {
                JSFUtil.enviarMenssagemSucesso("Inclua Foto(s) no Album");
            } else {
                Integer indice = this.getAlbuns().indexOf(this.getAlbum());
                this.getAlbum().setFotos(this.getFotos());
                this.getAlbumBO().alterar(this.getAlbum());
                this.getAlbuns().remove(this.getAlbum());
                this.getAlbuns().add(indice, this.getAlbum());
                JSFUtil.enviarMenssagemSucesso("Album alterado com sucesso");
            }
        } catch (Exception e) {
            JSFUtil.enviarMenssagemErro("Erro ao alterar" + " " + e.getMessage());
        }

    }

    public void apagar() {
        if (this.getAlbum() == null) {
            JSFUtil.enviarMenssagemAtencao("Selecione um Album na grid");
        } else {
            try {
                this.getAlbumBO().apagar(this.getAlbum());
                this.setFotos(new ArrayList());
                this.getAlbuns().remove(this.getAlbum());
                JSFUtil.enviarMenssagemSucesso("Album apagado com sucesso");
            } catch (Exception e) {
                JSFUtil.enviarMenssagemErro("Erro ao apagar" + " "
                        + e.getMessage());
            }
        }

    }

    private void listar() {
        try {
            this.setAlbuns(this.getAlbumBO().listar());
        } catch (Exception e) {
            e.printStackTrace();
            JSFUtil.enviarMenssagemErro("Erro ao listar");
        }
    }

    private void listarClientes() {
        try {
            this.setClientes(this.getClienteBO().listarClientes());
        } catch (Exception e) {
            e.printStackTrace();
            JSFUtil.enviarMenssagemErro("Erro ao listar Clientes");
        }

    }

    public void selecionarAlbum(SelectEvent evento) {
        System.out.println("tf");
        this.prepararAlteracao();
    }

    private void prepararAlteracao() {
        this.setFotos(this.getAlbum().getFotos());
    }

    public void prepararFoto(SelectEvent evento) {
    }

    public void prepararData(ValueChangeEvent evento) {
        System.out.print("dddd");
        if (this.getFoto().getPublicado().equals(Publicado.SIM)) {
            Date dataAtual = new Date();
            this.getFoto().setDataPublicada(dataAtual);
        } else {
            this.getFoto().setDataPublicada(null);
        }
    }

    public void apagarFoto() {
        if (this.getFoto() == null) {
            JSFUtil.enviarMenssagemAtencao("Selecione uma Foto na grid");
        } else {
            try {
                this.getFotos().remove(this.getFoto());
                JSFUtil.enviarMenssagemSucesso("Foto apagada com sucesso");
            } catch (Exception e) {
                JSFUtil.enviarMenssagemErro("Erro ao apagar" + " "
                        + e.getMessage());
            }
        }

    }

    public void selecionarFoto(ActionEvent e) {
        if (this.getFoto() == null) {
            JSFUtil.enviarMenssagemAtencao("Selecione uma Foto na grid");
        } else {
            String diretorioFoto = "C:" + File.separator + "Desenvolvimento" + File.separator + "Projetos" + File.separator + "Studio" + File.separator + "Projeto" + File.separator + "web" + File.separator + "fotos";
            String nomeFoto = diretorioFoto + File.separator + this.getFoto().getNome();
            try {
                EntradaSaidaUtil.limparDiretorio(diretorioFoto);
                InputStream is = new ByteArrayInputStream(this.foto.getFoto());
                EntradaSaidaUtil.gravarArquivo(nomeFoto, is);
                System.out.println("img foto" + this.getFoto().getNome());
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }

    }

    //Metodos em geral
    public void selecionarFotos(FileUploadEvent event) throws IOException {
        UploadedFile uf = event.getFile();
        String nomeArquivo = uf.getFileName();
        InputStream is = null;
        Foto foto = new Foto();
        try {
            is = uf.getInputstream();
            //Populo o objeto Foto

            foto.setNome(nomeArquivo);
            foto.setFoto(uf.getContents());
            //  foto.setImagem(uf.getInputstream());
            // foto.setImagemStream(new DefaultStreamedContent(uf.getInputstream()));

            fotos.add(foto);
            JSFUtil.enviarMenssagemSucesso("Upload realizado com sucesso.");
        } catch (Exception e) {
            e.printStackTrace();
            JSFUtil.enviarMenssagemErro("Erro ao realizar o Upload.");
        } finally {
            try {
                is.close();
            } catch (IOException ex) {
                ex.printStackTrace();
                JSFUtil.enviarMenssagemErro("Erro ao realizar o Upload.");
            }
        }
    }
}

os botoes que estão marcado "// NAO FUNCIONA" esta comblema.

outra coisa a dtAlbum quando seleciona ela abre um dialog e atualiza alguma coisa , este evento só funciona no mozila.

mais uma coisa rsrsr o p:fileUpload não funciona no moxila pq?

Então... eu tenho um exemplo de upload que funcionou em todos os meus browsers... depois se quiser me passa 1 email

[email removido]

E

sobre os botoes viw nada de deferente né?

gostaria

[email removido]

E

mudei para versão 3.0 do prime e funciono

Criado 14 de abril de 2011
Ultima resposta 16 de abr. de 2011
Respostas 32
Participantes 5