Boa tarde pessoal,
Estou continuando meus estudos em JSF + PrimeFaces… e estou com o seguinte problema:
Tenho um CRUD (que estou fazendo pra aprender mesmo) de UF… tudo já está funcionando, porém está acontecendo um comportamento bem estranho e eu ainda não consegui identificar/entender o problema.
Tenho um botão “NOVO”, um “ALTERAR”, um “EXCLUIR” e em seguida, um campo de pesquisa, que atualiza a grid.
Se eu rodar o sistema e clicar em novo, nada acontece (comportamento da função é instanciar um novo objeto e mudar a guia do tabview). Se eu consultar alguma coisa, ou seja, se eu digitar alguma coisa no campo de pesquisa, atualizando assim a grid, o botão “NOVO” passa a funcionar…
Detalhe, isso não acontece só no botão novo, mas em todos os botões do container…
Alguém poderia me dar uma dica?
P.S.: Desconfio que tem ligação com a composição dos forms e/ou os updates, mas não consegui solução…
Segue o código:
XHTML:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:head>
</h:head>
<h:body>
<p:growl id="msg" showDetail="true"/>
<p:tabView id="tabGeral" activeIndex="#{CadUf.tabSelecionada}">
<p:tab id="tabConsulta" title="Consulta" disabled="#{CadUf.tabConsulta}">
<h:form id="formConsulta">
<p:dataTable id="tableConsulta" var="u" value="#{CadUf.ufs}"
paginator="true" rows="10"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="5,10,15,20,25" selection="#{CadUf.uf}" selectionMode="single" rowKey="#{u.nome}">
<p:column style="width:20%">
<f:facet name="header">
Cód. Uf:
</f:facet>
<h:outputLabel value="#{u.cod_uf}" />
</p:column>
<p:column>
<f:facet name="header">
Nome da Uf:
</f:facet>
<h:outputLabel value="#{u.nome}" />
</p:column>
<p:column style="width:20%">
<f:facet name="header">
Sigla:
</f:facet>
<h:outputLabel value="#{u.sigla}" />
</p:column>
</p:dataTable>
<br></br>
<h:panelGrid columns="5">
<p:commandButton value="Novo" icon="ui-icon-lightbulb"
actionListener="#{CadUf.novo}" update=":tabGeral, :tabGeral:tabConsulta, :tabGeral:tabCadastro"/>
<p:commandButton value="Alterar" icon="ui-icon-pencil"
actionListener="#{CadUf.alterar}" update=":tabGeral, :tabGeral:tabConsulta, :tabGeral:tabCadastro"/>
<p:commandButton value="Excluir" onclick="return confirm('Tem certeza de que deseja excluir este registro?')" icon="ui-icon-trash"
actionListener="#{CadUf.excluir}" update="formConsulta"/>
<h:outputLabel value="Pesquisar:"/>
<p:inputText value="#{CadUf.textPesquisa}">
<p:ajax event="keyup" listener="#{CadUf.pesquisar}" update="tableConsulta"/>
</p:inputText>
</h:panelGrid>
</h:form>
</p:tab>
<p:tab title="Cadastro" id="tabCadastro" disabled="#{CadUf.tabCadastro}">
<h:form id="formCadastro">
<h:panelGrid columns="2">
Código: <h:inputText value="#{CadUf.uf.cod_uf}" size="50" id="codigo" />
Nome: <h:inputText value="#{CadUf.uf.nome}" size="50" id="nome" />
Sigla: <h:inputText value="#{CadUf.uf.sigla}" size="50" id="sigla" />
</h:panelGrid>
<h:panelGrid columns="3">
<p:commandButton value="Salvar" icon="ui-icon-disk" actionListener="#{CadUf.salvar}" update=":msg, :tabGeral, :tabGeral:tabConsulta, :tabGeral:tabCadastro"/>
<p:commandButton value="Limpar" icon="ui-icon-document" actionListener="#{CadUf.limpar}" update="formCadastro"/>
<p:commandButton value="Cancelar" icon="ui-icon-radio-off" actionListener="#{CadUf.cancelar}" update=":tabGeral, :tabGeral:tabConsulta, :tabGeral:tabCadastro"/>
</h:panelGrid>
</h:form>
</p:tab>
</p:tabView>
</h:body>
</html>
Beans:
package script;
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ViewScoped;
import model.Uf;
import dao.UfDao;
@ManagedBean(name="CadUf")
@ViewScoped
public class CadUf implements Serializable{
private static final long serialVersionUID = 1L;
private Uf uf;
UfDao ufdao = new UfDao();
private List<Uf> ufs;
private Integer tabSelecionada = 0;
private String textPesquisa;
private Boolean tabConsulta;
private Boolean tabCadastro = true;
private String action;
public String getAction() {
return action;
}
public void setAction(String action) {
this.action = action;
}
public Boolean getTabConsulta() {
return tabConsulta;
}
public void setTabConsulta(Boolean tabConsulta) {
this.tabConsulta = tabConsulta;
}
public Boolean getTabCadastro() {
return tabCadastro;
}
public void setTabCadastro(Boolean tabCadastro) {
this.tabCadastro = tabCadastro;
}
public String getTextPesquisa() {
return textPesquisa;
}
public void setTextPesquisa(String textPesquisa) {
this.textPesquisa = textPesquisa;
}
public CadUf() {
atualiza();
}
public void atualiza() {
ufs = ufdao.getAll();
}
public Uf getUf() {
return uf;
}
public List<Uf> getUfs() {
return ufs;
}
public void setUfs(List<Uf> ufs) {
this.ufs = ufs;
}
public void setUf(Uf uf) {
this.uf = uf;
}
public void novo() {
uf = new Uf();
tabCadastro = false;
tabConsulta = true;
tabSelecionada = 1;
}
public UfDao getUfdao() {
return ufdao;
}
public void setUfdao(UfDao ufdao) {
this.ufdao = ufdao;
}
public Integer getTabSelecionada() {
return tabSelecionada;
}
public void setTabSelecionada(Integer tabSelecionada) {
this.tabSelecionada = tabSelecionada;
}
public void salvar() {
try {
ufdao.salva(uf);
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage("Sucesso!", "O cadastro da Uf " + uf.getNome() + " foi realizado"));
tabConsulta = false;
tabCadastro = true;
tabSelecionada = 0;
atualiza();
} catch (Exception e) {
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage("Falha", "Problemas ao cadastrar a Uf " + uf.getNome() + " - Detalhes: " + e.getMessage() ));
}
}
public void alterar() {
tabCadastro = false;
tabConsulta = true;
tabSelecionada = 1;
}
public void excluir() {
try {
ufdao.deleta(uf);
atualiza();
} catch (Exception e) {
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage("Falha", "Problemas ao excluir a Uf " + uf.getNome() + " - Detalhes: " + e.getMessage() ));
}
}
public void pesquisar() {
ufs = ufdao.getCampo("nome", textPesquisa);
}
public void limpar() {
uf = new Uf();
}
public void cancelar() {
limpar();
tabConsulta = false;
tabCadastro = true;
tabSelecionada = 0;
}
}