JSF + RichFaces + Facelets - Aplicação - Formulário principal

6 respostas
M

Boa Noite,
Pessoal estou desenvolvendo uma aplicação para universidade e estou precisando da ajuda de vocês;
Estou usando ajax "ajaxRendered="true"" para incluir as paginas no formulário principal mais isto está gerando um problema nos componentes richfaces quando utilizado "onkeypress", "onkeydown". Existe outra forma para incluir as páginas ??? O correto seria utilizar actions para passar para outras páginas ?? Se sim, como ???

Segue os códigos utilizados:

Principal Template:

<?xml version='1.0' encoding='UTF-8' ?>
<!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:a4j="http://richfaces.org/a4j"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:rich="http://richfaces.org/rich"
      xmlns:ui="http://java.sun.com/jsf/facelets">

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
        <title>Principal</title>
    </head>
    <body>
        <ui:composition template="templatePrincipal.xhtml" >
            <ui:define name="menu">
                <ui:include src="frmMenu.xhtml" />
            </ui:define>
            <ui:define name="conteudo">
                <a4j:outputPanel ajaxRendered="true">
                    <a4j:include viewId="#{MenuAction.corrente}"/>
                </a4j:outputPanel>
            </ui:define>
            <ui:define name="rodape">
                Desenvolvido por:  Woodpecker - Usuário: #{LoginAction.userName}
            </ui:define>
        </ui:composition>
    </body>
</html>

Menu

<?xml version='1.0' encoding='UTF-8' ?>
<!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:a4j="http://richfaces.org/a4j"
      xmlns:rich="http://richfaces.org/rich">
    <head>
        <link href="./css/menu.css" rel="stylesheet" type="text/css" />
    </head>
    <body>
        <ui:composition>
            <h:form id="form">
                <h:panelGrid columns="2" columnClasses="cols" width="100%">
                    <rich:panelMenu style="width:186px"   mode="ajax"
                                    iconExpandedGroup="disc" iconCollapsedGroup="disc"
                                    iconExpandedTopGroup="chevronUp" iconGroupTopPosition="right"
                                    iconCollapsedTopGroup="chevronDown" iconCollapsedTopPosition="right"  >
                        <rich:panelMenuGroup label="Cadastros">
                            <rich:panelMenuItem label="Cidade" value="frmCidade.xhtml" actionListener="#{MenuAction.updateCurrent}" >
                            </rich:panelMenuItem>
                            <rich:panelMenuItem  label="Usuário" value="frmUsuario.xhtml" actionListener="#{MenuAction.updateCurrent}" >
                            </rich:panelMenuItem>
                            <rich:panelMenuItem  label="Teste" value="newFacelets.xhtml" actionListener="#{MenuAction.updateCurrent}" >
                            </rich:panelMenuItem>
                            <rich:panelMenuItem  label="Produto" value="frmProduto.xhtml" actionListener="#{MenuAction.updateCurrent}" >
                            </rich:panelMenuItem>
                            <rich:panelMenuItem  label="Fornecedor" value="frmFornecedorAj.xhtml" actionListener="#{MenuAction.updateCurrent}" >
                            </rich:panelMenuItem>
                            <rich:panelMenuItem label="Padrão" value="frmPadrao.xhtml"  actionListener="#{MenuAction.updateCurrent}" >
                            </rich:panelMenuItem>
                        </rich:panelMenuGroup>
                        <rich:panelMenuGroup label="Movimentação">
                            <rich:panelMenuItem  label="Orçamento" value="frmOrcamento.xhtml" actionListener="#{MenuAction.updateCurrent}" >
                            </rich:panelMenuItem>
                        </rich:panelMenuGroup>
                        <rich:panelMenuGroup label="Relatórios">
                            <rich:panelMenuItem  label="Relatório de Produto" value="frmRelatorio.xhtml" actionListener="#{MenuAction.updateCurrent}" >
                            </rich:panelMenuItem>
                        </rich:panelMenuGroup>
                    </rich:panelMenu>
                </h:panelGrid>
                #{MenuAction.correnteR}
                #{MenuAction.corrente}
            </h:form>
        </ui:composition>
    </body>
</html>

MenuACtion

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.bcs.action;

import javax.faces.event.ActionEvent;
import org.richfaces.component.UIPanelMenuItem;

public class MenuAction  {

    private String corrente;

   
    /** Creates a new instance of menu */
    public MenuAction() {
        this.setCorrente("frmPadrao.xhtml");
    }
    /**
     * @return the corrente
     */
    public String getCorrente() {
        return corrente;
    }
    /**
     * @param corrente the corrente to set
     */
    public void setCorrente(String corrente) {
        this.corrente = corrente;
    }

    public void updateCurrent(ActionEvent event) {
        this.setCorrente(((UIPanelMenuItem)event.getComponent()).getValue().toString());
    }

     public String comandoAvancar(){
      return "paginaInicio";
     }

}
formulário incorporado:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <ui:composition 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:a4j="http://richfaces.org/a4j"
                    xmlns:rich="http://richfaces.org/rich"
                    xmlns:ajax="https://ajax4jsf.dev.java.net/ajax"
                    xmlns:c="http://java.sun.com/jstl/core">
        <head>
            <link href="./css/estilos.css" rel="stylesheet" type="text/css" />
            <title>
                <ui:insert name="title">
                    Cadastro de Fornecedores
                </ui:insert>
            </title>
            <style  type="text/css">
                .odd-row {
                    background-color: #ECF3FE;
                }
                .even-row {
                    background-color: #FCFFFE;
                }
                .col {
                    text-align: center;
                }
                .col2 {
                    text-align: right;
                }
                .col3 {
                    text-align: left;
                    background-color: #ECF3FE;
                }
                .col4 {
                    text-align: left;
                }
            </style>
        </head>
        <!-- define searchlistBlock -->
        <body>

            <f:view>
                <a4j:outputPanel ajaxRendered="false" id="mainOutputPanel">
                    <a4j:form>
                        <!-- bloco de pesquisa -->
                        <rich:panel id="searchlistBlock"  rendered="#{FornecedorAction.pesquisarState}"  style="text-align:center;"  >
                            <f:facet name="header" >
                                Pesquisar
                            </f:facet>
                            <h:panelGrid columns="1">
                                <h:column>
                                    <rich:spacer height="20" />
                                    <a4j:commandButton value="Adicionar" action="#{FornecedorAction.prepareAdicionar}" immediate="true"/>
                                </h:column>
                            </h:panelGrid>
                            <rich:spacer  height="20" />
                            <rich:dataTable  width="683" id="fornecedorList" rows="10" reRender="ds" ajaxSingle="true"
                                             rowClasses="odd-row,even-row"
                                             columnClasses="col" value="#{FornecedorAction.fornecedores}" var="row">
                                <rich:column sortBy="#{row.codigo}" >
                                    <f:facet name="header">
                                        <h:outputText styleClass="headerText" value="Código" />
                                    </f:facet>
                                    <h:outputText value="#{row.codigo}" />
                                </rich:column>
                                <rich:column sortBy="#{row.nome}" >
                                    <f:facet name="header">
                                        <h:outputText styleClass="headerText" value="Nome" />
                                    </f:facet>
                                    <h:outputText value="#{row.nome}" />
                                </rich:column>
                                <rich:column sortBy="#{row.cpfCnpj}"   >
                                    <f:facet name="header">
                                        <h:outputText styleClass="headerText" value="CPF/CNPJ" />
                                    </f:facet>
                                    <h:outputText value="#{row.cpfCnpj}" />
                                </rich:column>
                                <rich:column sortBy="#{row.cidade.descricao}"   >
                                    <f:facet name="header">
                                        <h:outputText styleClass="headerText" value="Cidade" />
                                    </f:facet>
                                    <h:outputText value="#{row.cidade.descricao}" />
                                </rich:column>
                                <rich:column width="50" >
                                    <f:facet name="header">
                                        <h:outputText styleClass="headerText" value="Ações" />
                                    </f:facet>
                                    <span>
                                        <a4j:commandLink action="#{FornecedorAction.prepareEditar}" immediate="true">
                                            <h:graphicImage value="/imagens/edit.gif" style="border:0"/>
                                            <f:setPropertyActionListener value="#{row}" target="#{FornecedorAction.fornecedor}"/>
                                        </a4j:commandLink>
                                    </span>
                                    <!-- <span>
                                <a4j:commandLink immediate="true" action="#{FornecedorAction.getFornecedores}" oncomplete="Richfaces.showModalPanel('panel',{width:550, top:200});">
                                    <h:graphicImage value="/imagens/delete.gif" style="border:0"/>
                                    <f:setPropertyActionListener value="#{row}" target="#{FornecedorAction.fornecedor}"/>
                                </a4j:commandLink>
                                    </span> -->
                                </rich:column>
                                <f:facet name="footer" styleClass="footerText" >
                                    <rich:datascroller align="center" id="ds" renderIfSinglePage="false" maxPages="20" />
                                </f:facet>
                            </rich:dataTable>
                            <rich:modalPanel id="panel" width="350" height="100">
                                <f:facet name="header">
                                    <h:panelGroup>
                                        <h:outputText value="Confirmação"></h:outputText>
                                    </h:panelGroup>
                                </f:facet>
                                <f:facet name="controls">
                                    <h:panelGroup>
                                        <h:graphicImage value="imagens/images.jpeg" styleClass="hidelink" id="hidelink"/>
                                        <rich:componentControl for="panel" attachTo="hidelink" operation="hide" event="onclick"/>
                                    </h:panelGroup>
                                </f:facet>
                                <h:outputText value="Deseja excluir a fornecedor selecionada ?"></h:outputText>
                                <br/><br/>
                                &lt;a4j:commandButton value="excluir" action="#{FornecedorAction.excluir}" immediate="true"&gt;
                                &lt;/a4j:commandButton&gt;
                                &lt;a4j:commandButton value="cancelar" action="#{FornecedorAction.voltar}" immediate="true"&gt;
                                &lt;/a4j:commandButton&gt;
                            &lt;/rich:modalPanel&gt;
                            &lt;rich:spacer  height="20" /&gt;
                        &lt;/rich:panel&gt;

                        &lt;!-- define addUpdateBlock --&gt;
                        &lt;rich:panel id="addUpdateBlock" style="text-align:center;"  rendered="#{FornecedorAction.adicionarState or FornecedorAction.editarState}"&gt;
                            &lt;f:facet name="header"&gt;
                                Dados
                            &lt;/f:facet&gt;
                            &lt;rich:spacer height="20" /&gt;
                            &lt;h:panelGrid  witch="300"  columns="3" border="0"  id="panel2"  binding="#{FornecedorAction.panelForm}" columnClasses="col4"&gt;
                                &lt;h:outputLabel value="Tipo:"/&gt;
                                &lt;h:column&gt;
                                    &lt;rich:comboBox id="tipo" value="#{FornecedorAction.fornecedor.tipo}" maxlength="10" size="10" defaultLabel="Fisica" required="true"
                                                   requiredMessage="Campo Tipo de fornecedor é obrigatório." selectFirstOnUpdate="true" &gt;
                                        &lt;f:selectItem itemValue="Fisica"  /&gt;
                                        &lt;f:selectItem itemValue="Juridica"/&gt;
                                    &lt;/rich:comboBox&gt;
                                &lt;/h:column&gt;
                                &lt;h:column&gt;
                                    &lt;h:message for="tipo" errorStyle="color: darkred;"/&gt;
                                &lt;/h:column&gt;
                                &lt;h:outputLabel value="CPF / CNPJ:"/&gt;
                                &lt;h:column&gt;
                                    &lt;h:inputText value="#{FornecedorAction.cpfCnpj}" maxlength="20" size="20" required="true" id="cpfcnpj"
                                                 requiredMessage="Campo CPF / CNPJ é obrigatório." &gt;
                                        &lt;a4j:support action="#{FornecedorAction.verificaFornecedor}" ajaxSingle="true" event="onblur" reRender="rgInscricao"/&gt;
                                    &lt;/h:inputText&gt;
                                &lt;/h:column&gt;
                                &lt;h:column&gt;
                                    &lt;h:message for="cpfcnpj" errorStyle="color: darkred;"/&gt;
                                &lt;/h:column&gt;
                                &lt;h:outputLabel value="RG / Inscrição:"/&gt;
                                &lt;h:column &gt;
                                    &lt;h:inputText ajaxRendered="true" value="#{FornecedorAction.fornecedor.rgInscricao}"  maxlength="20" size="20" required="true" id="rgInscricao"
                                                 requiredMessage="Campo RG / Inscrição é obrigatório." /&gt;
                                &lt;/h:column&gt;
                                &lt;h:column&gt;
                                    &lt;h:message for="rgInscricao" errorStyle="color: darkred;"/&gt;
                                &lt;/h:column&gt;
                                &lt;h:outputLabel value="Nome:"/&gt;
                                &lt;h:column&gt;
                                    &lt;h:inputText value="#{FornecedorAction.fornecedor.nome}" maxlength="20" size="20" required="true" id="nome"
                                                 requiredMessage="Campo nome é obrigatório." /&gt;
                                &lt;/h:column&gt;
                                &lt;h:column&gt;
                                    &lt;h:message for="nome" errorStyle="color: darkred;"/&gt;
                                &lt;/h:column&gt;
                                &lt;h:outputLabel value="Nome Fantasia:"/&gt;
                                &lt;h:column&gt;
                                    &lt;h:inputText value="#{FornecedorAction.fornecedor.nomeFantasia}" maxlength="100" size="50" required="true" id="nomeFantasia"
                                                 requiredMessage="Campo nome fantasia é obrigatório." /&gt;
                                &lt;/h:column&gt;
                                &lt;h:column&gt;
                                    &lt;h:message for="nomeFantasia" errorStyle="color: darkred;"/&gt;
                                &lt;/h:column&gt;
                                &lt;h:outputLabel value="Endereço:"/&gt;
                                &lt;h:column&gt;
                                    &lt;h:inputText value="#{FornecedorAction.fornecedor.endereco}" maxlength="100" size="50" id="endereco" /&gt;
                                &lt;/h:column&gt;
                                &lt;h:column&gt;
                                &lt;/h:column&gt;
                                &lt;h:outputLabel value="Bairro:"/&gt;
                                &lt;h:column&gt;
                                    &lt;h:inputText value="#{FornecedorAction.fornecedor.bairro}" maxlength="25" size="25" id="bairro" /&gt;
                                &lt;/h:column&gt;
                                &lt;h:column&gt;
                                &lt;/h:column&gt;
                                &lt;h:outputLabel value="Telefone:"/&gt;
                                &lt;h:column&gt;
                                    &lt;h:inputText value="#{FornecedorAction.fornecedor.fone}" maxlength="20" size="20" id="fone" /&gt;
                                &lt;/h:column&gt;
                                &lt;h:column&gt;
                                &lt;/h:column&gt;
                                &lt;h:outputLabel value="Telefax:"/&gt;
                                &lt;h:column&gt;
                                    &lt;h:inputText value="#{FornecedorAction.fornecedor.fax}" maxlength="40" size="40" id="fax" /&gt;
                                &lt;/h:column&gt;
                                &lt;h:column&gt;
                                &lt;/h:column&gt;
                                &lt;h:outputLabel value="Cidade:"/&gt;
                                &lt;h:column&gt;
                                    &lt;h:inputText   value="#{FornecedorAction.codigoCidade}" readonly="true" maxlength="4" size="4" required="true" id="codigoCidade"
                                                   requiredMessage="Campo cidade é obrigatório." /&gt;
                                    &lt;h:inputText value="#{FornecedorAction.descricaoCidade}" maxlength="20" size="20" id="cidade" &gt;
                                        &lt;a4j:support ajaxSingle="true" event="onblur"
                                                     reRender="codigoCidade, cidade, cep"&gt;
                                        &lt;/a4j:support&gt;
                                    &lt;/h:inputText&gt;
                                    &lt;h:outputLink  value="#" id="link"&gt;
                                        Digite o nome da cidade para pesquisa
                                        &lt;rich:componentControl for="selectCidade" ajaxSingle="false" immediate="true" attachTo="link" operation="show" event="onclick"/&gt;
                                    &lt;/h:outputLink&gt;
                                &lt;/h:column&gt;
                                &lt;h:column&gt;
                                &lt;/h:column&gt;
                                &lt;h:outputLabel value="CEP:"/&gt;
                                &lt;h:column&gt;
                                    &lt;h:inputText value="#{FornecedorAction.fornecedor.cep}" maxlength="10" size="10" id="cep" /&gt;
                                &lt;/h:column&gt;
                                &lt;h:column&gt;
                                &lt;/h:column&gt;
                                &lt;h:outputLabel value="eMail:"/&gt;
                                &lt;h:column&gt;
                                    &lt;h:inputText value="#{FornecedorAction.fornecedor.email}" maxlength="40" size="40" id="email" /&gt;
                                &lt;/h:column&gt;
                                &lt;h:column&gt;
                                &lt;/h:column&gt;
                                &lt;h:outputLabel value="Contato:"/&gt;
                                &lt;h:column&gt;
                                    &lt;h:inputText value="#{FornecedorAction.fornecedor.contato}" maxlength="40" size="40" id="contato" /&gt;
                                &lt;/h:column&gt;
                                &lt;h:column&gt;
                                &lt;/h:column&gt;
                                &lt;h:outputLabel value="Observação:"/&gt;
                                &lt;h:column&gt;
                                    &lt;h:inputTextarea value="#{FornecedorAction.fornecedor.observacao}"  style="height: 46px; width: 336px"  maxlength="255" size="255" id="observacao" /&gt;
                                &lt;/h:column&gt;
                            &lt;/h:panelGrid&gt;
                            &lt;rich:spacer height="40" /&gt;
                            &lt;a4j:commandButton value="Adicionar" action="#{FornecedorAction.adicionar}" rendered="#{FornecedorAction.adicionarState}"/&gt;
                            &lt;a4j:commandButton value="Salvar" action="#{FornecedorAction.editar}" rendered="#{FornecedorAction.editarState}"/&gt;
                            &lt;a4j:commandButton value="Voltar" action="#{FornecedorAction.voltar}" immediate="true"/&gt;
                            &lt;rich:modalPanel id="selectCidade" width="800" height="300"  style="text-align:center;" &gt;
                                &lt;f:facet name="header"&gt;
                                    &lt;h:panelGroup&gt;
                                        &lt;h:outputText value="Selecione a cidade: "&gt;&lt;/h:outputText&gt;
                                    &lt;/h:panelGroup&gt;
                                &lt;/f:facet&gt;
                                &lt;f:facet name="controls"&gt;
                                    &lt;h:panelGroup&gt;
                                        &lt;h:graphicImage value="imagens/images.jpeg" styleClass="hidelink1" id="hidelink1"/&gt;
                                        &lt;rich:componentControl for="selectCidade" attachTo="hidelink1" operation="hide" event="onclick"/&gt;
                                    &lt;/h:panelGroup&gt;
                                &lt;/f:facet&gt;
                                &lt;rich:dataTable  width="683" id="cidadeList" rows="10" reRender="ds" ajaxSingle="true"
                                                 rowClasses="odd-row,even-row"
                                                 columnClasses="col" value="#{FornecedorAction.cidades}" var="rowCid"&gt;
                                    &lt;rich:column sortBy="#{rowCid.codigo}" &gt;
                                        &lt;f:facet name="header"&gt;
                                            &lt;h:outputText styleClass="headerText" value="Código" /&gt;
                                        &lt;/f:facet&gt;
                                        &lt;h:outputText value="#{rowCid.codigo}" /&gt;
                                    &lt;/rich:column&gt;
                                    &lt;rich:column sortBy="#{rowCid.descricao}" filter="#{rowCid.descricao}"  &gt;
                                        &lt;f:facet name="header"&gt;
                                            &lt;h:outputText styleClass="headerText" value="Descrição" /&gt;
                                        &lt;/f:facet&gt;
                                        &lt;h:outputText value="#{rowCid.descricao}" /&gt;
                                    &lt;/rich:column&gt;
                                    &lt;rich:column sortBy="#{rowCid.estado}" &gt;
                                        &lt;f:facet name="header"&gt;
                                            &lt;h:outputText styleClass="headerText" value="Estado" /&gt;
                                        &lt;/f:facet&gt;
                                        &lt;h:outputText value="#{rowCid.estado}" /&gt;
                                    &lt;/rich:column&gt;
                                    &lt;rich:column width="50" &gt;
                                        &lt;f:facet name="header"&gt;
                                            &lt;h:outputText styleClass="headerText" value="Ações" /&gt;
                                        &lt;/f:facet&gt;
                                        &lt;span&gt;
                                            &lt;a4j:commandLink value="Selecionar" immediate="true" ajaxSingle="true" reRender="codigoCidade, cidade" &gt;
                                                &lt;f:setPropertyActionListener value="#{rowCid}" target="#{FornecedorAction.fornecedor.cidade}"/&gt;
                                                &lt;f:setPropertyActionListener value="#{rowCid.codigo}" target="#{FornecedorAction.codigoCidade}"/&gt;
                                                &lt;f:setPropertyActionListener value="#{rowCid.descricao}" target="#{FornecedorAction.descricaoCidade}"/&gt;
                                            &lt;/a4j:commandLink&gt;
                                        &lt;/span&gt;
                                    &lt;/rich:column&gt;
                                    &lt;f:facet name="footer" styleClass="footerText" &gt;
                                        &lt;rich:datascroller align="center" id="ds" renderIfSinglePage="false" maxPages="20" /&gt;
                                    &lt;/f:facet&gt;
                                &lt;/rich:dataTable&gt;
                            &lt;/rich:modalPanel&gt;
                        &lt;/rich:panel&gt;
                    &lt;/a4j:form&gt;
                &lt;/a4j:outputPanel&gt;
            &lt;/f:view&gt;
        &lt;/body&gt;
    &lt;/ui:composition&gt;
&lt;/html&gt;

FornecedorAction

package br.bcs.action;

import br.bcs.bo.CidadeBo;
import br.bcs.bo.FornecedorBo;
import br.bcs.entity.Fornecedor;
import br.bcs.entity.Cidade;
import java.util.Collection;
import java.util.List;
import javax.faces.model.ListDataModel;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.component.UIComponent;
import javax.faces.component.UIPanel;
import javax.faces.model.DataModel;

/**
 *
 * @author Márcio Neves
 */
public class FornecedorAction {

    public static final String PESQUISAR_STATE = "pesquisar";
    public static final String ADICIONAR_STATE = "adicionar";
    public static final String EDITAR_STATE = "editar";
    private String currentState = PESQUISAR_STATE;
    private Fornecedor fornecedor;
    protected DataModel fornecedores;
    private UIPanel panelForm;
    private FornecedorBo fornecedorBo;
    private CidadeBo cidadeBo;
    protected DataModel cidades;
    private String codigoCidade;
    private String descricaoCidade;
    private String cpfCnpj;
    private String jaCadastrado = "";                       // String de informação

    /** Creates a new instance of CidadeAction */
    public FornecedorAction() {
    }

    public String getCurrentState() {
        return currentState;
    }

    public void setCurrentState(String currentState) {
        this.currentState = currentState;
    }

    public UIPanel getPanelForm() {
        return panelForm;
    }

    public void setPanelForm(UIPanel panelForm) {
        this.panelForm = panelForm;
    }

    /**
     * Prepara view adicionar
     */
    public String prepareAdicionar() {
        this.cpfCnpj = null;
        this.codigoCidade = null;
        this.descricaoCidade = null;
        this.clear();
        this.setCurrentState(ADICIONAR_STATE);
        return "goToAdicionarFornecedor";
    }

    /**
     * Prepara view adicionar
     */
    public String preparePesquisarCidade() {
        return "goToAdicionarFornecedor";
    }
    /**
     * Prepara view editar
     */
    public String prepareEditar() {
        this.setCurrentState(EDITAR_STATE);
        this.setCpfCnpj(this.fornecedor.getCpfCnpj());
        this.setCodigoCidade(String.valueOf(fornecedor.getCidade().getCodigo()));
        this.setDescricaoCidade(String.valueOf(fornecedor.getCidade().getDescricao()));
        return "goToEditarFornecedor";
    }

    public String preparePesquisar() {
        this.isPesquisarState();
        return "goToPesquisarFornecedor";
    }

    /*
     * Métodos que expõem o estado à página
     */
    public boolean isPesquisarState() {
        String state = this.getCurrentState();
        return (state == null || PESQUISAR_STATE.equals(state));
    }

    public boolean isAdicionarState() {
        return ADICIONAR_STATE.equals(this.getCurrentState());
    }

    public boolean isEditarState() {
        return EDITAR_STATE.equals(this.getCurrentState());
    }

    /**
     * Limpa os componentes filhos para que depois eles possam ser recriados
     * @param component
     */
    protected void cleanSubmittedValues(UIComponent component) {
        component.getChildren().clear();
    }

    public void setFornecedores(DataModel fornecedores) {
        this.fornecedores = fornecedores;
    }

    public FornecedorBo getFornecedorBo() {
        if (fornecedorBo == null) {
            fornecedorBo = new FornecedorBo();
        }
        return fornecedorBo;
    }

    public DataModel getFornecedores() {
        this.setCurrentState(PESQUISAR_STATE);
        List&lt;Fornecedor&gt; lista = getFornecedorBo().listFornecedor(currentState, currentState);
        fornecedores = new ListDataModel(lista);
        return fornecedores;
    }

    public Fornecedor getFornecedor() {
        if (fornecedor == null) {
            this.fornecedor = new Fornecedor();
        }
        return fornecedor;
    }

    public void setFornecedor(Fornecedor fornecedor) {
        this.fornecedor = fornecedor;
    }

    public String getDescricaoCidade() {
        return descricaoCidade;
    }

    public void setDescricaoCidade(String descricaoCidade) {
        this.descricaoCidade = descricaoCidade;
    }

    /**
     * Adiciona usuário
     */
    public void adicionar() {

        try {
            this.getFornecedorBo().saveFornecedor(this.fornecedor, this.getCpfCnpj());
        } catch (Exception ex) {
            Logger.getLogger(FornecedorAction.class.getName()).log(Level.SEVERE, null, ex);
        }
        this.getFornecedores();
    }
    /**
     * Edita usuário
     */
    public void editar() {
        try {
            // já edita diretamente na lista (a lista está como static)
            this.getFornecedorBo().updateFornecedor(this.fornecedor);
            this.cpfCnpj = null;
            this.codigoCidade = null;
            this.descricaoCidade = null;
        } catch (Exception ex) {
            Logger.getLogger(FornecedorAction.class.getName()).log(Level.SEVERE, null, ex);
        }
        this.getFornecedores();
    }

    public String getCodigoCidade() {
        return codigoCidade;
    }

    public void setCodigoCidade(String codigoCidade) {
        this.codigoCidade = codigoCidade;
    }


    public Collection getEstado() {
        return this.cidadeBo.listEstados();
    }


    public String searchCidade() {
        Cidade cidade = new Cidade();
        try {
            cidade = this.fornecedorBo.searchCidade(Integer.parseInt(codigoCidade));
            fornecedor.setCidade(cidade);
        } catch (Exception ex) {
        }
        return null;
    }

    public CidadeBo getCidadeBo() {
        if (cidadeBo == null) {
            cidadeBo = new CidadeBo();
        }
        return cidadeBo;
    }

    public void setCidades(DataModel cidades) {
        this.cidades = cidades;
    }

    public DataModel getCidades() {
        List&lt;Cidade&gt; lista = getCidadeBo().listCidade( "Descricao",this.descricaoCidade );
        cidades = new ListDataModel(lista);
        return cidades;
    }

        public String verificaFornecedor() throws Exception {
        this.fornecedor = this.fornecedorBo.verificaFornecedor(this.cpfCnpj);
        if (this.fornecedor != null) {
            codigoCidade = String.valueOf(fornecedor.getCidade().getCodigo());
            jaCadastrado = "Fornecedor já cadastrado";
            this.prepareEditar();
            return null;
        }
        this.verificaPessoa();
        return null;
    }

    /**
     * Metodo que verifica se o Objeto Funcionario
     * ja existe no banco de dados.
     * Esse metodo é chamado pelo metodo atualizaTipoPessoa()
     * desta classe
     * @return
     * @throws java.lang.Exception
     */
    public boolean verificaPessoa() throws Exception {
        fornecedor = fornecedorBo.verificaPessoa(getCpfCnpj());
        jaCadastrado = "";
        this.codigoCidade = "";
        if (fornecedor != null) {
            codigoCidade = String.valueOf(fornecedor.getCidade().getCodigo());
            jaCadastrado = "Fornecedor já cadastrado como pessoa, apenas complete os dados restantes";
            return true;
        }
        fornecedor = new Fornecedor();
        return false;
    }



    /**
     * Exclui usuário

    public void excluir() {
    try {
    this.getProdutoBo().deleteProduto(this.produto);
    } catch (Exception ex) {
    Logger.getLogger(ProdutoAction.class.getName()).log(Level.SEVERE, null, ex);
    }
    this.getProdutos();
    }

     * /**
     * Referente ao botão voltar
     */
    public String voltar() {
        this.clear();
        this.getFornecedores();
        return "goToPesquisarFornecedor";
    }

    /**
     * Limpa atributos
     */
    private void clear() {
        this.fornecedor = new Fornecedor();
        this.cleanSubmittedValues(this.panelForm);
    }

    /**
     * @return the cpfCnpj
     */
    public String getCpfCnpj() {
        return cpfCnpj;
    }

    /**
     * @param cpfCnpj the cpfCnpj to set
     */
    public void setCpfCnpj(String cpfCnpj) {
        this.cpfCnpj = cpfCnpj;
    }
}

6 Respostas

rollei

cara to comecando a aprender facelets agora, mas pelo que eu aprendi voce nao precisa dar include nenhum no seu template principal, como voce esta fazendo.

Basto no seu template principal voce declarar uma area ui:insert que voce vai sobrescrever na sua pagina que vai usar o template.
Digamos que no seu template voce tem:
<ui:insert name=“area”>Insere a area</ui:insert>

na sua pagina que usa o template voce deve definir:
<ui:define name=“area”>Ele subistitui a area do template</ui:define>

seria isso que voce quer fazer?

javer

Uma coisa que eu faço (como é igual em todas as páginas) no próprio template eu já monto o menu (via BB), tenho um template chamado template_pages.xhtml nele contém uma barra de ferramentas e menu no topo de cada página, aí de acordo com cada página aberta eu decido como vai ser comportar cada ítem do menu.

M

Você pode colocar o exemplo ???

javer
mannett:
Você pode colocar o exemplo ???
Sem problemas, lembrando que é o template e não a página em si. template_pages.xhtml:
&lt;?xml version='1.0' encoding='UTF-8' ?&gt; 
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;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:rich="http://richfaces.ajax4jsf.org/rich"
      xmlns:a4j="http://richfaces.org/a4j"
      xmlns:f="http://java.sun.com/jsf/core" &gt;
    
    &lt;head&gt;
        &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;
        &lt;link href="./../css/default.css" rel="stylesheet" type="text/css" /&gt;
        &lt;link href="./../css/cssLayout.css" rel="stylesheet" type="text/css" /&gt;
        &lt;title&gt;#{mainBean.titulo} v#{mainBean.versao} #{mainBean.empresa}&lt;/title&gt;
    &lt;/head&gt;
    
    &lt;body&gt;
        &lt;div id="top" class="top"&gt;
        &lt;h:form&gt;
            
         &lt;rich:toolBar height="26" itemSeparator="grid"&gt;
         &lt;rich:toolBarGroup&gt;
            
            &lt;rich:dropDownMenu&gt;
                &lt;f:facet name="label"&gt;
                    &lt;h:panelGroup&gt;
                        &lt;h:graphicImage value="/images/buttons/36.png" styleClass="pic"/&gt;
                        &lt;h:outputText value="Gerencial"/&gt;
                    &lt;/h:panelGroup&gt;
                &lt;/f:facet&gt;
                &lt;rich:menuItem submitMode="ajax" value="Configurações" action="#{mainMenuBean.parametros}" icon="/images/buttons/Tool.gif" /&gt;
                &lt;!-- O disabled deve ser controlado no BB --&gt;
                &lt;rich:menuItem submitMode="ajax" value="Usuários" action="#{mainMenuBean.usuarios}" disabled="#{mainBean.menuUsuarioDisabled}"
                            id="itemMenuUsuario"
                    icon="/images/buttons/User.gif" /&gt;
                
                &lt;rich:menuItem
                    value="#{msg.tituloTarifa}"
                    submitMode="ajax"
                    icon="/images/menus/tarifa.png"
                    action="#{mainMenuBean.tarifa}" /&gt;
                
                &lt;rich:menuItem value="Clientes" submitMode="ajax" icon="/images/menus/clientes.png" action="#{mainMenuBean.clientes}" /&gt;
                &lt;rich:menuItem value="Fornecedores" submitMode="ajax" icon="/images/menus/fornecedores.png"  action="#{mainMenuBean.fornecedores}" /&gt;
                &lt;rich:menuItem value="Vendedores" submitMode="ajax" icon="/images/menus/vendedores.png"  action="#{mainMenuBean.vendedores}" /&gt;
                
                &lt;rich:menuSeparator /&gt;
                &lt;rich:menuItem value="Voltar ao Início"
                               submitMode="ajax"
                               action="#{mainMenuBean.inicio}"
                               icon="/images/buttons/45.png" /&gt;
                &lt;rich:menuItem value="Sair do Sistema"
                               submitMode="ajax"
                               action="#{mainMenuBean.actionLogout}"
                               icon="/images/buttons/16.png" /&gt;
                
            &lt;/rich:dropDownMenu&gt;
            
            &lt;rich:dropDownMenu&gt;            
            &lt;f:facet name="label"&gt;
                &lt;h:panelGrid cellpadding="0" cellspacing="0" columns="2"
                             style="vertical-align:middle"&gt;
                    &lt;h:outputText value="Financeiro" /&gt;
                &lt;/h:panelGrid&gt;
            &lt;/f:facet&gt;            
            &lt;rich:menuItem value="Contas Pagar" submitMode="ajax" icon="/images/menus/contas_pagar.png" action="#{mainMenuBean.contas_pagar}" /&gt;
            &lt;rich:menuItem value="Contas Receber" submitMode="ajax" icon="/images/menus/contas_receber.png" action="#{mainMenuBean.contas_receber}" /&gt;
            &lt;rich:menuItem value="Comissão" submitMode="ajax" icon="/images/menus/comissao.png" action="#{mainMenuBean.comissao}" /&gt;
            &lt;/rich:dropDownMenu&gt;
         &lt;/rich:toolBarGroup&gt;
            
         &lt;rich:toolBarGroup&gt;
                &lt;!-- Grupo vazio COLOCAR ATALHOS EM BOTOES --&gt;
                &lt;rich:spacer width="50" /&gt;
            &lt;/rich:toolBarGroup&gt;
            
            &lt;rich:toolBarGroup&gt;
                &lt;!-- Grupo vazio COLOCAR ATALHOS EM BOTOES --&gt;
                &lt;rich:spacer width="50" /&gt;
            &lt;/rich:toolBarGroup&gt;
            
            &lt;rich:toolBarGroup location="right"&gt;
                &lt;h:outputText value="#{mainBean.mensagemUsuarioLogado}"/&gt;
                &lt;h:commandButton
                    value="Desconectar" action="#{mainMenuBean.actionLogout}"&gt;
                &lt;/h:commandButton&gt;
            &lt;/rich:toolBarGroup&gt;
            
            &lt;/rich:toolBar&gt;
            &lt;/h:form&gt;
                        
        &lt;/div&gt;
        
        &lt;div&gt;
            &lt;div id="left" &gt;
                &lt;ui:insert name="left"&gt;Espaço reservado a esquerda&lt;/ui:insert&gt;
            &lt;/div&gt;
            &lt;div id="content" class="right_content"&gt;
                &lt;ui:insert name="content"&gt;Aqui vai todo o conteúdo à direita&lt;/ui:insert&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/body&gt;
    
&lt;/html&gt;
Já a página ficaria assim, clientes.xhtml:
&lt;?xml version='1.0' encoding='UTF-8' ?&gt;
&lt;!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                template="./../templates/template_pages.xhtml"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:rich="http://richfaces.ajax4jsf.org/rich"
                xmlns:a4j="http://richfaces.org/a4j"
                xmlns:f="http://java.sun.com/jsf/core"&gt;
    
    &lt;ui:define name="left"&gt;
        &lt;!-- por enquanto nao vai nada aqui --&gt;
    &lt;/ui:define&gt;

    &lt;ui:define name="content"&gt;
        &lt;h1&gt;Cadastro de Clientes&lt;/h1&gt;
        
    &lt;/ui:define&gt;

&lt;/ui:composition&gt;
M

Valew, javer.

Muito obrigado;

Kleber-rr
javer:
mannett:
Você pode colocar o exemplo ???
Sem problemas, lembrando que é o template e não a página em si. template_pages.xhtml:
&lt;?xml version='1.0' encoding='UTF-8' ?&gt; 
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;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:rich="http://richfaces.ajax4jsf.org/rich"
      xmlns:a4j="http://richfaces.org/a4j"
      xmlns:f="http://java.sun.com/jsf/core" &gt;
    
    &lt;head&gt;
        &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;
        &lt;link href="./../css/default.css" rel="stylesheet" type="text/css" /&gt;
        &lt;link href="./../css/cssLayout.css" rel="stylesheet" type="text/css" /&gt;
        &lt;title&gt;#{mainBean.titulo} v#{mainBean.versao} #{mainBean.empresa}&lt;/title&gt;
    &lt;/head&gt;
    
    &lt;body&gt;
        &lt;div id="top" class="top"&gt;
        &lt;h:form&gt;
            
         &lt;rich:toolBar height="26" itemSeparator="grid"&gt;
         &lt;rich:toolBarGroup&gt;
            
            &lt;rich:dropDownMenu&gt;
                &lt;f:facet name="label"&gt;
                    &lt;h:panelGroup&gt;
                        &lt;h:graphicImage value="/images/buttons/36.png" styleClass="pic"/&gt;
                        &lt;h:outputText value="Gerencial"/&gt;
                    &lt;/h:panelGroup&gt;
                &lt;/f:facet&gt;
                &lt;rich:menuItem submitMode="ajax" value="Configurações" action="#{mainMenuBean.parametros}" icon="/images/buttons/Tool.gif" /&gt;
                &lt;!-- O disabled deve ser controlado no BB --&gt;
                &lt;rich:menuItem submitMode="ajax" value="Usuários" action="#{mainMenuBean.usuarios}" disabled="#{mainBean.menuUsuarioDisabled}"
                            id="itemMenuUsuario"
                    icon="/images/buttons/User.gif" /&gt;
                
                &lt;rich:menuItem
                    value="#{msg.tituloTarifa}"
                    submitMode="ajax"
                    icon="/images/menus/tarifa.png"
                    action="#{mainMenuBean.tarifa}" /&gt;
                
                &lt;rich:menuItem value="Clientes" submitMode="ajax" icon="/images/menus/clientes.png" action="#{mainMenuBean.clientes}" /&gt;
                &lt;rich:menuItem value="Fornecedores" submitMode="ajax" icon="/images/menus/fornecedores.png"  action="#{mainMenuBean.fornecedores}" /&gt;
                &lt;rich:menuItem value="Vendedores" submitMode="ajax" icon="/images/menus/vendedores.png"  action="#{mainMenuBean.vendedores}" /&gt;
                
                &lt;rich:menuSeparator /&gt;
                &lt;rich:menuItem value="Voltar ao Início"
                               submitMode="ajax"
                               action="#{mainMenuBean.inicio}"
                               icon="/images/buttons/45.png" /&gt;
                &lt;rich:menuItem value="Sair do Sistema"
                               submitMode="ajax"
                               action="#{mainMenuBean.actionLogout}"
                               icon="/images/buttons/16.png" /&gt;
                
            &lt;/rich:dropDownMenu&gt;
            
            &lt;rich:dropDownMenu&gt;            
            &lt;f:facet name="label"&gt;
                &lt;h:panelGrid cellpadding="0" cellspacing="0" columns="2"
                             style="vertical-align:middle"&gt;
                    &lt;h:outputText value="Financeiro" /&gt;
                &lt;/h:panelGrid&gt;
            &lt;/f:facet&gt;            
            &lt;rich:menuItem value="Contas Pagar" submitMode="ajax" icon="/images/menus/contas_pagar.png" action="#{mainMenuBean.contas_pagar}" /&gt;
            &lt;rich:menuItem value="Contas Receber" submitMode="ajax" icon="/images/menus/contas_receber.png" action="#{mainMenuBean.contas_receber}" /&gt;
            &lt;rich:menuItem value="Comissão" submitMode="ajax" icon="/images/menus/comissao.png" action="#{mainMenuBean.comissao}" /&gt;
            &lt;/rich:dropDownMenu&gt;
         &lt;/rich:toolBarGroup&gt;
            
         &lt;rich:toolBarGroup&gt;
                &lt;!-- Grupo vazio COLOCAR ATALHOS EM BOTOES --&gt;
                &lt;rich:spacer width="50" /&gt;
            &lt;/rich:toolBarGroup&gt;
            
            &lt;rich:toolBarGroup&gt;
                &lt;!-- Grupo vazio COLOCAR ATALHOS EM BOTOES --&gt;
                &lt;rich:spacer width="50" /&gt;
            &lt;/rich:toolBarGroup&gt;
            
            &lt;rich:toolBarGroup location="right"&gt;
                &lt;h:outputText value="#{mainBean.mensagemUsuarioLogado}"/&gt;
                &lt;h:commandButton
                    value="Desconectar" action="#{mainMenuBean.actionLogout}"&gt;
                &lt;/h:commandButton&gt;
            &lt;/rich:toolBarGroup&gt;
            
            &lt;/rich:toolBar&gt;
            &lt;/h:form&gt;
                        
        &lt;/div&gt;
        
        &lt;div&gt;
            &lt;div id="left" &gt;
                &lt;ui:insert name="left"&gt;Espaço reservado a esquerda&lt;/ui:insert&gt;
            &lt;/div&gt;
            &lt;div id="content" class="right_content"&gt;
                &lt;ui:insert name="content"&gt;Aqui vai todo o conteúdo à direita&lt;/ui:insert&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/body&gt;
    
&lt;/html&gt;
Já a página ficaria assim, clientes.xhtml:
&lt;?xml version='1.0' encoding='UTF-8' ?&gt;
&lt;!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                template="./../templates/template_pages.xhtml"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:rich="http://richfaces.ajax4jsf.org/rich"
                xmlns:a4j="http://richfaces.org/a4j"
                xmlns:f="http://java.sun.com/jsf/core"&gt;
    
    &lt;ui:define name="left"&gt;
        &lt;!-- por enquanto nao vai nada aqui --&gt;
    &lt;/ui:define&gt;

    &lt;ui:define name="content"&gt;
        &lt;h1&gt;Cadastro de Clientes&lt;/h1&gt;
        
    &lt;/ui:define&gt;

&lt;/ui:composition&gt;

Olá javer, td bem??

Cara, seu exemplo me ajudou muito, mas eu queria pedir mais uma coisa: vc pode postar teu faces-config e tua classe mainmenuBean??

Agradeço man.

Criado 8 de junho de 2009
Ultima resposta 25 de jan. de 2010
Respostas 6
Participantes 4