Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Carregamento para uma outra pagina html

Galera boa tarde estou fazendo alguns teste aqui apos conclusao dos cursos que fiz na alura e me sugiu uma duvida, tenho a minha pagina xhtml de cadastro.

<?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:h="http://xmlns.jcp.org/jsf/html"
        xmlns:f="http://xmlns.jcp.org/jsf/core"
        xmlns:p="http://primefaces.org/ui"
        xmlns:ui="http://xmlns.jcp.org/jsf/facelets">

    <ui:composition template="_template.xhtml">
        <ui:define name="cabecalho">
            <p:outputPanel>Cadastro de Funcionarios</p:outputPanel>
        </ui:define>

        <ui:define name="conteudo">
        <h:form id="cadastro">
        <p:growl id="mensagem" showDetail="true"  />
            <p:fieldset legend="Cadastro">
            <p:panelGrid columns="2">
                <p:outputLabel value="Nome: " for="nome"/>
                <p:inputText id="nome" value="#{funcionarioController.funcionario.nome}"/>
                <p:outputLabel value="Idade: " for="idade"/>
                <p:inputText id="idade" value="#{funcionarioController.funcionario.idade}"/>
                <p:outputLabel value="Telefone " for="telefone"/>
                <p:inputMask id="telefone" value="#{funcionarioController.funcionario.telefone}" mask="(999) 999-9999"/>
                <p:outputLabel value="CPF: " for="cpf"/>
                <p:inputMask id="cpf" value="#{funcionarioController.funcionario.cpf}" mask="999.999.999-99"/>
                <p:outputLabel value="Salario " for="salario"/>
                <p:inputNumber id="salario" value="#{funcionarioController.funcionario.salario}">  
                    <p:ajax update="salario" />  
                </p:inputNumber> 
                <p:outputLabel value="Data Contratada:" for="data"/> 
                <p:calendar id="data" value="#{funcionarioController.funcionario.data.time}" showOn="button" locale="de" navigator="true" pattern="dd/MM/yyyy" effect="fold" >
                    <f:convertDateTime pattern="dd/MM/yyyy" timeZone="America/Sao_Paulo"/>
                </p:calendar>
                <p:outputLabel value="Observação: " for="observacao"/>
                <p:inputTextarea rows="6" cols="33" id="observacao" value="#{funcionarioController.funcionario.observacao}" />
                <p:outputLabel value="Cidade: " for="cidade"/>
                <p:inputText id="cidade" value="#{funcionarioController.endereco.cidade}"/>
                <p:outputLabel value="Bairro: " for="bairro"/>
                <p:inputText id="bairro" value="#{funcionarioController.endereco.bairro}"/>
                <p:outputLabel value="CEP " for="cep"/>
                <p:inputText id="cep" value="#{funcionarioController.endereco.cep}"/>
                <p:outputLabel value="Numero Casa: " for="numero"/>
                <p:inputText id="numero" value="#{funcionarioController.endereco.numeroCasa}"/>
            </p:panelGrid>
            </p:fieldset>
            <p:commandButton value="Cadastrar" action="#{funcionarioController.cadastrar}" update="cadastro" process="@all"/>
            <p:commandButton value="Limpar" type="reset"/>
        </h:form>
        </ui:define>
    </ui:composition>

</html>

Depois criei uma paginha xhtml de tabela dos funcionarios.

<?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:h="http://xmlns.jcp.org/jsf/html"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:p="http://primefaces.org/ui"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets">

<ui:composition template="_template.xhtml">
    <ui:define name="cabecalho">
        <p:outputPanel>Tabela Funcionarios</p:outputPanel>
    </ui:define>

    <ui:define name="conteudo">
        <h:form id="cadastro">
            <p:growl id="mensagem" showDetail="true" />
            <p:fieldset legend="Cadastro" toggleable="true" toggleSpeed="500">
                <p:dataTable var="funcionario" value="#{funcionarioController.funcionarios}">
                <p:column headerText="Nome">
                        <h:outputText value="#{funcionario.nome}" />
                    </p:column>
                    <p:column headerText="Telefone">
                        <h:outputText value="#{funcionario.telefone}" />
                    </p:column>
                    <p:column headerText="CPF">
                        <h:outputText value="#{funcionario.cpf}" />
                    </p:column>
                    <p:column headerText="Idade">
                        <h:outputText value="#{funcionario.idade}" />
                    </p:column>
                    <p:column headerText="Salario">
                        <h:outputText value="#{funcionario.salario}">
                            <f:convertNumber type="currency" pattern="R$ #0.00" currencySymbol="R$" locale="pt_BR"/>
                        </h:outputText>
                    </p:column>
                    <p:column headerText="Observações">
                        <h:outputText value="#{funcionario.observacao}" />
                    </p:column>
                    <p:column headerText="Data">
                        <h:outputText value="#{funcionario.data.time}">
                            <f:convertDateTime pattern="dd/MM/yyyy" timeZone="America/Sao_Paulo"/>
                        </h:outputText>
                    </p:column>
                    <p:column headerText="Cidade">
                        <h:outputText value="#{funcionario.endereco.cidade}" />
                    </p:column>
                    <p:column headerText="CEP">
                        <h:outputText value="#{funcionario.endereco.cep}" />
                    </p:column>
                    <p:column headerText="Bairro">
                        <h:outputText value="#{funcionario.endereco.bairro}" />
                    </p:column>
                    <p:column headerText="Numero Casa">
                        <h:outputText value="#{funcionario.endereco.numeroCasa}" />
                    </p:column>
                    <p:column headerText="Remover">
                        <p:commandLink value="Excluir" action="#{funcionarioController.remover(funcionario)}" update="@form" process="@form"/>
                    </p:column>
                    <p:column headerText="Alteracao">
                        <p:commandLink value="alterar" actionListener="#{funcionarioController.carregar(funcionario)}" action="#{funcionarioController.formularioFuncionario}" update="@form" process="@form"/>
                    </p:column>
                </p:dataTable>
            </p:fieldset>
        </h:form>
    </ui:define>
</ui:composition>

</html>

No meu link alterar eu estou mandando uma ação para trocar de página e para a pagina funcionario, e quando eu mando para a pagina, os dados do funcionario aparecem tudo em branco, teria como eu mandar para a pagina funcionarios mais com os dados salvo na "memoria" e dai la dentro carregar tudo oque tava na minha pagina? Faz sentido?

5 respostas
solução!

Alisson, o seu ManagedBean deve estar com @RequestScoped. Você pode conseguir essa alteração com um escopo maior como um @SessionScoped. Mas você deve observar que o @SessionScoped tem um custo maior para o servidor.

Faz um teste e dá um retorno.

Abraço.

Manoel ai vem outra duvida. Muito bom sempre tirar minhas duvida com vc kkkk. RequestScoped e SessionScoped quais suas diferenças?

Era isso mesmo Manoel mais eu estava usando o viewScoped, quais suas diferenças, ja percebi que o SessionScoped em seu bean dura enquanto a pagina existir, algo assim ne?

Manoel para você ter esse conhecimento seu, você leu algum livro? qual?

E aí, Alisson!

Sempre que posso, dou uma ajuda pra galera no fórum. Agora que reparei, tô sempre dando umas ideias nos teus posts mesmo... hehe.

Então... O @RequestScoped é o menor escopo do JSF, justamente por isso, ele é o mais desejado de se usar, pelo baixo custo de gerenciá-lo, dado que o ciclo de vida dele é de apenas uma requisição. Isso significa que, após a requisição e retorno desta ao navegador do usuário, os dados do bean são apagados. Ele fica limpo de novo! Entretanto, em alguns casos, esse escopo não é suficiente, como no que você apresentou.

Já o @SessionScoped, que dura a sessão do usuário inteira. Com esse escopo, o desenvolvedor precisa se preocupar um pouco menos com esse lance de requisições, já que os dados do bean serão mantidos durante toda a sessão do usuário.

Há outros escopos, que você pode dar uma olhada nesses links:

http://uaihebert.com/jsf-mini-livro-dicas-conceitos-e-boas-praticas/7/

e nesse que, já que precisa manter apenas por uma única mudança de tela, talvez seja mais adequado que o Session. Dá uma lida, daí você verifica no seu modelo de negócio qual dos dois é mais adequado:

http://uaihebert.com/jsf-mini-livro-dicas-conceitos-e-boas-praticas/15/

Alisson, já li vários livros, inclusive esse do autor dos links que mandei. Já fiz alguns cursos da Caelum presenciais e trabalho com isso, o que dá um aprendizado maior. Li, também, o Use a Cabeça Java. Tem um que foi bem bacana e ajudou bastante quando comecei a estudar JSF, chama Programaçao Java Para A Web do Décio Heinzelmann Luckow. Pra mim, foi uma mão na roda. Se tiver a oportunidade, dá uma olhada numa livraria, pra ver se a leitura te agrada. Mas segue fazendo esses cursos do Alura, são muito bons também e bem práticos!

É isso! Qualquer coisa, só postar. Ajudo sempre que puder.

Abraço.