Bom dia pessoal, sou novo no fórum e estou postando esse tópico pois não encontrei nada a respeito quanto a atualização de um componente JSF via AJAX!
Meu problema é o seguinte!
Tenho um tabview e varias tabs dentro dele (um Crud dividido em abas), cada tab tem seu form, o que eu quero é que quando eu insira um cadastro atualize outro componente que está em uma outra tab, por exemplo:
<p:tabView>
<p:tab id=“cadastro”>
<h:form>
<h:outputLabel value=“Login” />
<p:inputText id=“login” value="#{usuarioController.usuario.login}" required=“true” label=“Login” />
<h:outputLabel value=“Senha” />
<p:password id=“senha” value="#{usuarioController.usuario.senha}" required=“true” label=“Senha” />
<p:commandButton actionListener="#{usuarioController.inserir}"
value=“Inserir”
update=“painel:tableLista,id_do_meu_componente,aba,form???”
style=“font-size:xx-small”
ajax=“true”/>
</h:form>
</p:tab>
<p:tab id=“Excluir”>
<h:form>
<!-- Esse componente que quero que atualize quando clicado no botão Inserir do form que está dentro da tab cadastro -->
<p:selectOneMenu id=“selectUsuariosCadastro”
title=“Usuários”
value="#{usuarioController.usuario.id}"
valueChangeListener="#{usuarioController.usuarioSelecionado}"
required=“true”
requiredMessage=“Campo obrigatório” style=“font-size:xx-small;width:250px;”>
<f:selectItem itemLabel=“Escolha o usuário” style=“font-size:xx-small” />
<f:selectItems value="#{usuarioController.listarUsuarios}" style=“font-size:xx-small” />
</p:selectOneMenu>
… e assim vai
</h:form>
</p:tab>
</p:tabView>
Abaixo meu xhtml e minha Bean
usuarios.xhtml
<?xml version=‘1.0’ encoding=‘UTF-8’ ?>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.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”
xmlns:ui=“http://java.sun.com/jsf/facelets”>
<h:head>
<title>Gerenciamento de Usuários</title>
<link rel=“stylesheet” type=“text/css” href=“css/style.css” />
</h:head>
<h:body>
<div class="cabecalho"></div>
<div class="main" style="text-align:center">
<div class="div_principal">
<div class="menu_esquerdo">
<p:panel header="Menu" style="width:180px;font-size:small;text-align:left">
<h:form>
<p:menu style="border:0px">
<p:submenu label="Gerenciar">
<p:menuitem value="Novo Usuário" update="messages"
oncomplete="novoUsuario.show()" icon="ui-icon-disk"
styleClass="menu_item" />
<p:menuitem value="Editar Usuário" update="messages"
oncomplete="editarUsuario.show()" styleClass="menu_item" />
<p:menuitem value="Excluir Usuário" update="messages"
oncomplete="excluirUsuario.show()"
icon="ui-icon-arrowrefresh-1-w" styleClass="menu_item" />
</p:submenu>
</p:menu>
</h:form>
</p:panel>
</div>
<div class="conteudo">
<p:tabView
style="width:500px;font-size:xx-small;margin-bottom:20px;"
autoHeight="false">
<p:tab title="Cadastrar Usuário" id="tab1" >
<h:form>
<h:panelGrid columns="2" cellpadding="3" styleClass="aba_texto">
<h:outputLabel value="Login" />
<p:inputText id="login"
value="#{usuarioController.usuario.login}" required="true"
label="Login" />
<h:outputLabel value="Senha" />
<p:password id="senha"
value="#{usuarioController.usuario.senha}" required="true"
label="Senha" />
<h:outputLabel value="Nome" />
<p:inputText id="nome" value="#{usuarioController.usuario.nome}"
required="true" label="Nome" />
<h:outputLabel value="Sobrenome " />
<p:inputText id="sobrenome"
value="#{usuarioController.usuario.sobreNome}" />
<h:outputLabel value="E-mail" />
<p:inputText id="email"
value="#{usuarioController.usuario.email}" required="true"
label="email" />
<h:outputLabel value="Status:" />
<p:selectOneRadio id="status"
value="#{usuarioController.usuario.status}">
<f:selectItem itemLabel="Ativo" itemValue="1" />
<f:selectItem itemLabel="Desativo" itemValue="0" />
</p:selectOneRadio>
<p:commandButton actionListener="#{usuarioController.control}"
value="Inserir"
update="painel:tableLista"
style="font-size:xx-small"
ajax="true"/>
<p:commandButton value="Limpar" type="reset"
style="font-size:xx-small" />
</h:panelGrid>
<p:messages id="messages" showDetail="false" autoUpdate="true"
redisplay="" />
</h:form>
</p:tab>
<p:tab title="Editar Usuário" id="tab2">
<h:form>
<h:panelGrid columns="2" cellpadding="3" styleClass="aba_texto">
<h:outputLabel value="Usuário:" />
<p:selectOneMenu title="Usuários"
value="#{usuarioController.usuario.id}" required="true"
requiredMessage="Campo obrigatório"
style="font-size:xx-small;width:250px;"
id="selectUsuariosEditar">
<f:selectItem itemLabel="Escolha o usuário"
style="font-size:xx-small" />
<f:selectItems value="#{usuarioController.listarUsuarios}"
style="font-size:xx-small" />
</p:selectOneMenu>
<h:outputLabel value="Nome:" />
<p:inputText id="loginEditar"
value="#{usuarioController.usuario.login}" />
<h:outputLabel value="Senha" />
<p:password id="senha"
value="#{usuarioController.usuario.senha}" />
<h:outputLabel value="Status:" />
<p:selectOneRadio value="#{usuarioController.usuario.status}">
<f:selectItem itemLabel="Ativado" itemValue="1" />
<f:selectItem itemLabel="Desativado" itemValue="0" />
</p:selectOneRadio>
<p:commandButton action="#{usuarioController.atualizar}"
value="Atualizar" style="font-size:xx-small" />
</h:panelGrid>
</h:form>
</p:tab>
<p:tab title="Excluir" id="tab3" rendered="">
<h:form id="c">
<h:panelGrid id="selectUsuariosPanel" columns="2" cellpadding="3"
styleClass="aba_texto">
<p:selectOneMenu
id="selectUsuariosCadastro"
title="Usuários"
value="#{usuarioController.usuario.id}"
valueChangeListener="#{usuarioController.usuarioSelecionado}"
required="true"
requiredMessage="Campo obrigatório"
style="font-size:xx-small;width:250px;">
<f:selectItem itemLabel="Escolha o usuário"
style="font-size:xx-small" />
<f:selectItems value="#{usuarioController.listarUsuarios}"
style="font-size:xx-small" />
</p:selectOneMenu>
<h:outputText id="usuarioSelecionadoText" value="#{usuarioController.usuario.id}" />
<p:commandButton value="Excluir"
onclick="confirmation.show()" type="button" ajax="true"
style="font-size:xx-small" />
<p:confirmDialog message="Tem certeza que deseja excluir ?"
header="Exclusão de Usuário" severity="alert"
widgetVar="confirmation">
<p:commandButton id="confirm" value="Sim"
oncomplete="confirmation.hide()"
action="#{usuarioController.excluir}"
style="font-size:xx-small"
update="painel:tableLista,selectUsuariosCadastro" />
<p:commandButton id="decline" value="Não"
style="font-size:xx-small" onclick="confirmation.hide()"
type="button" />
</p:confirmDialog>
</h:panelGrid>
</h:form>
</p:tab>
</p:tabView>
<h:form id="painel">
<h:panelGrid>
<p:dataTable id="tableLista" value="#{usuarioController.usuarios}"
paginator="true" rows="7" paginatorPosition="top"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="5,10,15" var="usuario"
style="width:500px;font-size:x-small;"
rowKey="#{usuarioController.usuario.id}"
selection="#{usuarioController.selectedUsuario}"
selectionMode="single">
<p:column styleClass="colunm_text">
<f:facet name="header">
<h:outputText value="ID" />
</f:facet>
<h:outputText value="#{usuario.id}" />
</p:column>
<p:column styleClass="colunm_text">
<f:facet name="header">
<h:outputText value="Login" />
</f:facet>
<h:outputText value="#{usuario.login}" />
</p:column>
<p:column styleClass="colunm_text">
<f:facet name="header">
<h:outputText value="Nome " />
</f:facet>
<h:outputText value="#{usuario.nome} #{usuario.sobreNome}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="E-mail" />
</f:facet>
<h:outputText value="#{usuario.email}" />
</p:column>
<p:column styleClass="colunm_text">
<f:facet name="header">
<h:outputText value="Status" />
</f:facet>
<h:outputText value="#{usuario.status}" />
</p:column>
</p:dataTable>
</h:panelGrid>
</h:form>
<!-- Telas de Cadastro, Edição e Exclusão -->
<!--Inserção -->
<p:dialog header="Cadastrar novo usuário" widgetVar="novoUsuario"
resizable="false" modal="true" showEffect="clip" width="500"
style="font-size:small;">
<h:form prependId="false">
<h:panelGrid columns="2" cellpadding="3" styleClass="aba_texto">
<h:outputLabel value="Nome" />
<p:inputText id="nome" required="true" label="Firstname"
value="#{usuarioController.usuario.login}" />
<h:outputLabel value="Senha" />
<p:password id="senha" value="#{usuarioController.usuario.senha}"
required="true" />
<h:outputLabel value="Status:" />
<p:selectOneRadio value="#{usuarioController.usuario.status}" style="font-size:xx-small">
<f:selectItem itemLabel="Ativo" itemValue="1" />
<f:selectItem itemLabel="Desativo" itemValue="0" />
</p:selectOneRadio>
<h:commandButton action="#{usuarioController.control}"
value="Inserir" />
</h:panelGrid>
</h:form>
</p:dialog>
<!-- Edição -->
<p:dialog header="Edição de Usuário" widgetVar="editarUsuario"
resizable="false" modal="true" showEffect="clip" width="500"
style="font-size:small;">
<h:form prependId="false">
<h:panelGrid columns="2" cellpadding="3" styleclass="aba_texto">
<h:outputLabel value="Nome:" style="font-size:xx-small" />
<p:inputText id="nome_usuario"
value="#{usuarioController.usuario.login}" />
<h:outputLabel value="Senha" />
<p:password id="senha_usuario"
value="#{usuarioController.usuario.senha}" />
<h:outputLabel value="Status:" />
<p:selectOneRadio value="#{usuarioController.usuario.status}">
<f:selectItem itemLabel="Ativado" itemValue="1" />
<f:selectItem itemLabel="Desativado" itemValue="0" />
</p:selectOneRadio>
<h:commandButton action="#{usuarioController.atualizar}"
value="Atualizar" />
</h:panelGrid>
</h:form>
</p:dialog>
<!-- Exclusão -->
<p:dialog header="Excluir usuário" widgetVar="excluirUsuario"
resizable="false" modal="true" showEffect="clip" width="500"
style="font-size:small;">
<h:form prependId="false">
<h:panelGrid columns="2" cellpadding="3" styleClass="aba_texto">
<h:inputText id="ID" value="#{usuarioController.usuario.id}" />
<h:commandButton action="#{usuarioController.excluir}"
value="Excluir" style="font-size:xx-small" />
</h:panelGrid>
</h:form>
</p:dialog>
</div>
</div>
</div>
</h:body>
</html>
UsuarioController.java
package br.com.controller;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;
import br.com.bean.Usuario;
import br.com.hibernatedao.UsuarioDAO;
@ManagedBean(name = “usuarioController”)
public class UsuarioController {
public Usuario usuario;
private Usuario selectedUsuario;
public List<Usuario> usuariosLista;
public List<Usuario> getUsuariosLista() {
return usuariosLista;
}
public void setUsuariosLista(List<Usuario> usuariosLista) {
this.usuariosLista = usuariosLista;
}
public void control() {
try{
UsuarioDAO inserirUsuario = new UsuarioDAO();
inserirUsuario.Salvar(usuario);
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage("Cadastro efetuado com sucesso: " + usuario.getLogin()));
}catch(Exception e){
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage("Cadastro não concluído" ));
}
}
public void excluir() {
UsuarioDAO excluir = new UsuarioDAO();
excluir.Excluir(usuario);
}
public void atualizar() {
UsuarioDAO atualizarUsuario = new UsuarioDAO();
atualizarUsuario.Atualizar(usuario);
}
public List<Usuario> getUsuarios(){
UsuarioDAO listarUsuarios = new UsuarioDAO();
return listarUsuarios.listar();
}
public void reset() {
usuario = null;
}
public Usuario getUsuario() {
if (usuario == null) {
usuario = new Usuario();
}
return usuario;
}
/**
* Metódo responsável por listar todos os usuários
* e adicionar num arrayList
* @return lista de usuarios do tipo SelectItem
*/
public List<SelectItem> getlistarUsuarios(){
List<SelectItem> itens = new ArrayList<SelectItem>();
List<Usuario> usuarios = new ArrayList();
UsuarioDAO listarUsuario = new UsuarioDAO();
usuarios = listarUsuario.listar();
for(Usuario linha : usuarios){
itens.add(new SelectItem(linha.getId(),linha.getLogin()));
}
return itens;
}
public void UsuarioSelecionado(ValueChangeEvent e){
this.setUsuarioSelecionado("teste - som");
}
public void setPessoa(Usuario usuario) {
this.usuario = usuario;
}
public Usuario getSelectedUsuario() {
return selectedUsuario;
}
public void setSelectedUsuario(Usuario selectedUsuario) {
this.selectedUsuario = selectedUsuario;
}
private String usuarioSelecionado;
public String getUsuarioSelecionado() {
return usuarioSelecionado;
}
public void setUsuarioSelecionado(String usuarioSelecionado) {
this.usuarioSelecionado = usuarioSelecionado;
}
private int count;
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public void increment() {
count = count + numero;
count++;
}
private int numero;
public int getNumero() {
return numero;
}
public void setNumero(int numero) {
this.numero = numero;
}
}
PS: Alguns métodos usei somente para testes e não removi da minha bean, assim como alguns componentes do meu xhtml!!
De ante mão, agradeço a todos!
Obrigado!