Double click first button to execute method

2

I'm developing an application in JavaWeb with the framework BootsFaces and PrimeFaces.

In one of my screens I have a form with a datatable of BootsFaces that when clicking on one of its lines triggers the method selectsUsuario () that updates the change form, however when I call the alterUsuario () method on this same form ) I need to click on the button for the method to be executed more than once.

I have already looked here in the stack and other forums, I found some answers but none solved my problem. How can I resolve 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;
    } 
}
    
asked by anonymous 05.09.2017 / 20:32

1 answer

2

It seems like the problem was with the Bootsfaces datable.

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

    
27.09.2017 / 20:06