Double click primefaces button to run method

Asked

Viewed 143 times

2

I am developing a Javaweb application with the Bootsfaces and Primefaces framework.

On one of my screens I have a form with a Bootsfaces datatable that when clicking on one of its lines triggers the method selectUsuario() that updates the change form, but when I call the method alterUsuario() in this same form (test) I need to click more than once on the button for the method to be executed.

I’ve looked here in the stack and other forums, found some answers but none solved my problem. How can I solve this?

<h:body>
        <h:form id="frmPrincipal">
            <div class="mainGrowl">
                <p:growl id="message" class="mainGrowl" showDetail="true" sticky="true"  />
            </div>

            <div class="change" style="width: 1230px;">
                <b:dataTable value="#{beanUsuario.usuarios}" style="width: 100%; " id="tabelaUsuario"
                             page-length="5" page-length-menu="5,10,20,50,100" var="usuario"
                             widgetVar="usuario" customLangUrl="json/Portuguese-Brasil.json" 
                             select="true" selectionMode="single" 
                             onselect="ajax:beanUsuario.selecionaUsuario(usuario);"

                             >
                    <b:dataTableColumn value="#{usuario.usuarioNome}" header-style="text-align:center;border-right:none;" 
                                       content-style="border:none; text-align:center;" label="Nome"/>
                    <b:dataTableColumn value="#{usuario.usuarioEmail}" header-style="text-align:center;" 
                                       content-style="border:none; text-align:center;" label="Email"/>

                </b:dataTable>
            </div>


        </h:form>
        <h:form id="teste">
            <p:inputText value="#{beanUsuario.usuarioSelecionado.usuarioNome}"/>
            <p:inputText value="#{beanUsuario.usuarioSelecionado.usuarioEmail}"/>
            <p:inputText value="#{beanUsuario.usuarioSelecionado.usuarioEnd}"/>
            <p:inputText value="#{beanUsuario.usuarioSelecionado.usuarioTel}"/>
            <p:inputText value="#{beanUsuario.usuarioSelecionado.usuarioDesc}"/>
            <p:inputText value="#{beanUsuario.usuarioSelecionado.usuarioSenha}"/>
            <p:inputText value="#{beanUsuario.usuarioSelecionado.usuarioTel}"/>
            <p:commandButton actionListener="#{beanUsuario.alteraUsuario}" value="alterar"/>
        </h:form>

This is my Bean:

package controller;

import ejb.UsuarioFacadeLocal;
import java.io.Serializable;
import model.Usuario;
import javax.inject.Named;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

import org.primefaces.context.RequestContext;

@Named(value = "beanUsuario")
@SessionScoped
public class BeanUsuario implements Serializable {

    private Usuario usuarioSelecionado;
    private List<Usuario> usuarios;
    private Usuario usuario;


    @EJB
    UsuarioFacadeLocal usuarioEJB;

    @PostConstruct
    public void init() {
        usuarios = new ArrayList<Usuario>();
        usuario = new Usuario();
        usuarioSelecionado = new Usuario();
    }



    public void selecionaUsuario(Usuario usuario1) {
        RequestContext context = RequestContext.getCurrentInstance();//INSTANCIANDO VARIÁVEIS DE TELA
        FacesContext fContext = FacesContext.getCurrentInstance();

        usuarioSelecionado = usuario1;

        context.update("teste");

        fContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Selecionado!", usuarioSelecionado.getUsuarioNome()));//ADICIONANDO MENSAGEM AO GROWL DA TELA
        context.update("frmPrincipal:message");


    }

    public void alteraUsuario() {
        RequestContext context = RequestContext.getCurrentInstance();//INSTANCIANDO VARIÁVEIS DE TELA

            usuarioEJB.edit(usuarioSelecionado); //ENVIANDO INSTRUÇÃO PARA O BANCO

            usuarioSelecionado = new Usuario(); //RESETANDO O USUÁRIO 

            context.update("teste");

            context.update("frmPrincipal");
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public Usuario getUsuarioSelecionado() {
        return usuarioSelecionado;
    }

    public void setUsuarioSelecionado(Usuario usuarioSelecionado) {
        this.usuarioSelecionado = usuarioSelecionado;
    }

    public List<Usuario> getUsuarios() {
        usuarios = usuarioEJB.findAll();
        return usuarios;
    }

    public void setUsuarios(ArrayList<Usuario> usuarios) {
        this.usuarios = usuarios;
    }

    public void setUsuarios(List<Usuario> usuarios) {
        this.usuarios = usuarios;
    } 
}

1 answer

2


It seems that the problem was even with the Bootsfaces datable.

So I replaced it with one of the Primefaces and it worked perfectly by clicking only once on the change button.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.