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;
}
}