Bom dia pessoal,
Estou iniciando na tecnologia JSF 2.0 + Primefaces. No entanto estou com um problema que sei que é básico, mas ainda não consegui encontrar a solução.
Já percebi que a maneira de se compor o formulário é muito importante pra que este funcione corretamente, e estou criando um facelet para padronizar os cadastros, mas não estou tendo sucesso, a idéia é:
Um p:tabView com duas p:tab:
1 - dataGrid com os dados, e os botões de novo, alterar, excluir e pesquisa.
2 - inputs dos campos e os botoes salvar, limpar e cancelar.
tudo isto em um template, que depois faço o ui:composition e preencho os “detalhes” de cada cadastro.
visualmente, tudo funcionando, no entanto, embora eu consiga acessar os atributos da minha classe bean (que por sinal eu passo via ui:param), eu não consigo acessar os métodos, e em meus testes, já percebi que o problema é em relação a minha montagem do formulário, onde colocar os h:form, essas coisas…
Poderiam me dar uma forcinha? Já pesquisei muito mas, é bastante específico e não consegui encontrar nada. Segue o código:
Template:
<?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:ui="http://java.sun.com/jsf/facelets"
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 width="100%" height="100%">
<p:panel id="panelGeral">
<p:growl id="msg" showDetail="true" />
<p:tabView id="tabGeral"
activeIndex="#{ ( bean.habilitaCadastro == false ? 0 : 1 ) }">
<p:tab id="tabConsulta" title="Consulta"
disabled="#{bean.habilitaCadastro}">
<h:form id="formConsulta">
<p:dataTable id="tableConsulta" var="regGrid" value="#{bean.lista}"
paginator="true" rows="15"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="5,10,15,20,25,30" selection="#{bean.objeto}"
selectionMode="single" rowKey="#{campoPrincipal}">
<ui:insert name="fieldsGrid" />
</p:dataTable>
<br></br>
<h:panelGrid columns="5">
<p:commandButton value="Novo" icon="ui-icon-lightbulb"
actionListener="#{bean.novo}" />
<p:commandButton value="Alterar" icon="ui-icon-pencil"
actionListener="#{bean.alterar}" />
<p:commandButton value="Excluir"
onclick="return confirm('Tem certeza de que deseja excluir este registro?')"
icon="ui-icon-trash" actionListener="#{bean.excluir}" />
<h:outputLabel value="Pesquisar:" />
<p:inputText name="textPesquisar" value="#{bean.textPesquisa}">
<p:ajax event="keyup" listener="#{bean.pesquisar}" />
</p:inputText>
</h:panelGrid>
</h:form>
</p:tab>
<p:tab title="Cadastro" id="tabCadastro"
disabled="#{!bean.habilitaCadastro}">
<h:form id="formCadastro">
<ui:insert name="fieldsCadastro" />
<h:panelGrid columns="3">
<p:commandButton value="Salvar" icon="ui-icon-disk"
actionListener="#{bean.limpar}" />
<p:commandButton value="Limpar" icon="ui-icon-document"
actionListener="#{bean.limpar}" />
<p:commandButton value="Cancelar" icon="ui-icon-radio-off"
actionListener="#{bean.limpar}" />
</h:panelGrid>
</h:form>
</p:tab>
</p:tabView>
</p:panel>
</h:body>
</html>
Composition:
<ui:composition template="/templates/crudTemplate.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<ui:param name="bean" value="#{cadUfBean}" />
<ui:param name="campoPrincipal" value="nome" />
<ui:define name="fieldsGrid">
<p:column style="width:20%">
<f:facet name="header"></f:facet>
<h:outputLabel value="#{regGrid.cod_uf}" />
</p:column>
<p:column style="width:20%">
<f:facet name="header"></f:facet>
<h:outputLabel value="#{regGrid.nome}" />
</p:column>
<p:column style="width:20%">
<f:facet name="header"></f:facet>
<h:outputLabel value="#{regGrid.sigla}" />
</p:column>
</ui:define>
<ui:define name="fieldsCadastro">
<h:panelGrid columns="2">
<h:outputLabel value="Cod. Uf:" />
<h:inputText name="textCodUf" size="50" value="#{bean.objeto.cod_uf}" />
<h:outputLabel value="Nome:" />
<h:inputText name="textNome" size="50" value="#{bean.objeto.nome}" />
<h:outputLabel value="Sigla:" />
<h:inputText name="textSigla" size="50" value="#{bean.objeto.sigla}" />
</h:panelGrid>
</ui:define>
</ui:composition>
Um abraço a todos!