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