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

templates reutilizaves com facelets

ola, ao termina minha pag do browser fico em branco. livro.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Novo Livro

Dados do Livro

Dados do Autor

Titulo ISBN Preço DATA

_template.xhtml

<?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">

22 respostas

_template.xhtml

<?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://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets">

    <h:head />
        <h:body>
            <div id="cabecalho"> 
            <h:graphicImage library="img" name="logo.png" />
            <h1><ui:insert name="titulo"> </ui:insert> </h1>
            </div>
            <div id="conteudo" >
                <ui:insert name="conteudo"></ui:insert>
            </div>

        </h:body>
    </html>

livro.xhtml
<?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://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"    >

    <ui:composition tamplate="_template.xhtml">
        <ui:define name="titulo">
            Novo Livro
        </ui:define>
    <ui:define name="conteudo">
    <h:form>

    <h:messages id="messages" />
        <fieldset>
            <legend>Dados do Livro</legend>
            <h:panelGrid columns="2">

                <h:outputLabel value="Titulo:" for="titulo" />
                <h:inputText id="titulo" value="#{livroBean.livro.titulo}" required="true" requiredMessage="titulo obrigatorio!"
                                validatorMessage="titulo nao pode ser superior a 40" >
                    <f:validateLength maximum="40" />
                    <f:ajax event="blur" render="messages" />
                </h:inputText>

                <h:outputLabel value="ISBN:" for="isbn" />
                <h:inputText id="isbn" value="#{livroBean.livro.isbn}" validator="#{livroBean.comecaComDigitoUm}"/>

                <h:outputLabel value="Preço:" for="preco" />
                <h:inputText id="preco" value="#{livroBean.livro.preco}" label ="Preço" >
                    <f:validateDoubleRange minimum="1.0" maximum="1000.0"/>
                </h:inputText>
                <h:outputLabel value="Data de Lançamento:" for="dataLancamento" />
                <h:inputText id="dataLancamento"
                    value="#{livroBean.livro.dataLancamento.time}" >
                    <f:convertDateTime pattern="dd/MM/yyyy/" timeZone="America/Sao_Paulo"/>
                    </h:inputText>
            </h:panelGrid>
        </fieldset>
        <fieldset>
            <legend>Dados do Autor</legend>
            <h:outputLabel value="Selecione Autor" for="autor"/>
            <h:selectOneMenu value="#{livroBean.autorId}" id="autor">

                <f:selectItems value="#{livroBean.autores}" var="autor"
                                itemLabel="#{autor.nome}" itemValue="#{autor.id}"/>

            </h:selectOneMenu>
            <h:commandButton value="Gravar Autor" action="#{livroBean.gravarAutor}">
            <f:ajax execute="autor" render="tabelaAutores" />
            </h:commandButton>
                <br />
                <h:commandLink value="Cadastrar novo autor" action="#{livroBean.formAutor}" immediate="true"   />
            <h:dataTable value="#{livroBean.autoresDoLivro}" var="autor" id="tabelaAutores">
            <h:column>
                <h:outputText value="#{autor.nome}"/>

            </h:column>
            </h:dataTable>
        </fieldset>
        <h:commandButton value="Gravar" action="#{livroBean.gravar}" >
            <f:ajax execute="@form" render="@form :tabelaLivros" />
        </h:commandButton>
    </h:form>

        <h:dataTable value="#{livroBean.livros}" var="livro" id="tabelaLivros" >
        <h:column>
            <f:facet name="header">Titulo</f:facet>        
            <h:outputText value="#{livro.titulo}"/>
        </h:column>
        <h:column>
            <f:facet name="header">ISBN</f:facet>
            <h:outputText value="#{livro.isbn}"/>
        </h:column>
        <h:column>
        <f:facet name="header">Preço</f:facet>
            <h:outputText value="#{livro.preco}">
            <f:convertNumber type="currency" pattern="R$ #0.00" currencySymbol="R$" locale="pt_BR"/>
            </h:outputText>
        </h:column>
        <h:column>
            <f:facet name="header">DATA</f:facet>
            <h:outputText value="#{livro.dataLancamento.time}">
                <f:convertDateTime pattern="dd/MM/yyyy" timeZone="America/Sao_Paulo" />
            </h:outputText>
        </h:column>


        </h:dataTable>
        </ui:define>
</ui:composition>

</html>

a tabela nao esta aparecendo igualno video

<?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">

Novo Livro

Titulo ISBN Preço DATA

Cadastro de Livros

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

 <ui:composition template="_template.xhtml">
  <ui:define name="titulo">
   Novo Livro
  </ui:define>
 <ui:define name="conteudo">

 <h:form>
  <p:messages id="messages" autoUpdate="true" />
  <p:growl autoUpdate="true" />
  <p:fieldset legend="Dadosdo livro">
   <h:panelGrid columns="2">
    <h:outputLabel value="Titulo:" for="titulo" />
    <p:inputText id="titulo" value="#{livroBean.livro.titulo}" required="true" requiredMessage="titulo obrigatorio!"
        validatorMessage="titulo nao pode ser superior a 40" >
     <f:validateLength maximum="40" />
     <f:ajax event="blur"  />
    </p:inputText>
    <h:outputLabel value="ISBN:" for="isbn" />
    <p:inputMask id="isbn" value="#{livroBean.livro.isbn}"
     validator="#{livroBean.comecaComDigitoUm}" mask="999-9-99-999999-9" />
    <h:outputLabel value="Preço:" for="preco" />
    <p:inputText id="preco" value="#{livroBean.livro.preco}" label ="Preço" >
     <f:validateDoubleRange minimum="1.0" maximum="1000.0"/>
    </p:inputText>
    <h:outputLabel value="Data de Lançamento:" for="dataLancamento" />
    <p:calendar id="dataLancamento"
     value="#{livroBean.livro.dataLancamento.time}"  pattern="dd/MM/yyyy/"
      timeZone="America/Sao_Paulo"/>

   </h:panelGrid>
  </p:fieldset>
  <p:fieldset legend="Dados do Autor">
   <h:outputLabel value="Selecione " for="autor"/>
   <p:commandLink value="ou cadastre novo autor"
    action="#{livroBean.formAutor}" immediate="true"   />
    <br/>
   <p:selectOneMenu value="#{livroBean.autorId}" id="autor">

    <f:selectItems value="#{livroBean.autores}" var="autor"
        itemLabel="#{autor.nome}" itemValue="#{autor.id}"/>

   </p:selectOneMenu>
   <br />
   <br />
   <h:commandButton value="Gravar Autor"
    action="#{livroBean.gravarAutor}" process="@this autor" update="tabelaAutores" >
   </h:commandButton>
    <br />
    <br/>
   <h:dataTable value="#{livroBean.autoresDoLivro}" var="autor"
    id="tabelaAutores" emptyMessage="Nenhum autor associado">
   <p:column>
    <h:outputText value="#{autor.nome}"/>

   </p:column>
   </h:dataTable>
  </p:fieldset>
  <h:commandButton value="Gravar" action="#{livroBean.gravar}" >
   <f:ajax execute="@form" render="@form :tabelaLivros" />
  </h:commandButton>
 </h:form>
  <p:dataTable value="#{livroBean.livros}" var="livro" id="tabelaLivros"
  paginator="true" rows="4">
  <p:column>
   <f:facet name="header">Titulo</f:facet>  
   <h:outputText value="#{livro.titulo}"/>
  </p:column>
  <p:column>
   <f:facet name="header">ISBN</f:facet>
   <h:outputText value="#{livro.isbn}"/>
  </p:column>
  <p:column>
  <f:facet name="header">Preço</f:facet>
   <h:outputText value="#{livro.preco}">
   <f:convertNumber type="currency" pattern="R$ #0.00" currencySymbol="R$" locale="pt_BR"/>
   </h:outputText>
  </p:column>
  <p:column>
   <f:facet name="header">DATA</f:facet>
   <h:outputText value="#{livro.dataLancamento.time}">
    <f:convertDateTime pattern="dd/MM/yyyy" timeZone="America/Sao_Paulo" />
   </h:outputText>
  </p:column>


  </p:dataTable>

  </ui:define>
  <ui:define name="texto">
  Cadastro de Livros
  </ui:define>
</ui:composition>

</html>

Com <p:column> você não precisa do <f:facet> para determinar o nome da coluna. Você pode usar <p:column headerText="nomeColuna">.

em todas <p:column ??????

Como sua tabela esta sendo exibida? O que esta difere da do vídeo? Só para eu entender melhor.

o erro que eu to falando Flavio esta em 8 minuto e 43 segundos .. pode me ajudar?

depois da modificacao nao aparece as opcoes pra selecionar os autores

Gustavo, você está se referindo a qual capítulo? Aliás, a alteração sugerida não deve afetar sua lista, verifique o XHTML.

components ricos com primefaces olha la o erro ocorre na parte de 8 minutos e 43 segundos

Então...

Identifiquei mais ou menos o problema,os componentes p:selectOneMenu não estão exibindo os itens, ou seja aparece apenas um icone com a seta da combo, mas nao exibe os itens.

Fiz um teste trocando p:selectOneMenu para h:selectOneMenu e funcionou.

Por exemplo:

Se eu colocar o seguinte código na minha página não vai funcionar.

<p:selectOneMenu value="#{livroBean.autorId}" id="autor">
<f:selectItems value="#{livroBean.autores}" var="autor" itemLabel="#{autor.nome}" itemValue="#{autor.id}" />
 </p:selectOneMenu>

Se eu alterar para o seguinte código

<h:selectOneMenu value="#{livroBean.autorId}" id="autor">
<f:selectItems value="#{livroBean.autores}" var="autor"
itemLabel="#{autor.nome}" itemValue="#{autor.id}" />
</u:selectOneMenu>

irá funcionar.

OBS: acho que deve ser alguma coisa com primefaces.

Olá Gustavo! Que bom que você conseguiu funcionar com o componente original do JSF. Eu fiz um teste com a versão do primefaces e funcinou aqui. Porém, vi que o código que você colou para nós do h:selectOneMenu está com a tag de fechamento trocada. No seu código final está assim? Tente mais uma vez com a versão do primefaces e cole o código de sua página e template aqui atualizada para que possamos ver.

Abraço

<?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">

Novo Livro

Titulo ISBN Preço DATA

Cadastro de Livros

nao resolveu nao. por exemplo o switch dos temas permanece desabilitado

desconsidera amsg anterior

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

<ui:composition template="_template.xhtml">
    <ui:define name="titulo">
   Novo Livro
 </ui:define>
    <ui:define name="conteudo">

        <h:form>
            <p:messages id="messages" autoUpdate="true" />
            <p:growl autoUpdate="true" />
            <p:fieldset legend="Dadosdo livro">
                <h:panelGrid columns="2">
                    <h:outputLabel value="Titulo:" for="titulo" />
                    <p:inputText id="titulo" value="#{livroBean.livro.titulo}"
                        required="true" requiredMessage="titulo obrigatorio!"
                        validatorMessage="titulo nao pode ser superior a 40">
                        <f:validateLength maximum="40" />
                        <f:ajax event="blur" />
                    </p:inputText>
                    <h:outputLabel value="ISBN:" for="isbn" />
                    <p:inputMask id="isbn" value="#{livroBean.livro.isbn}"
                        validator="#{livroBean.comecaComDigitoUm}"
                        mask="999-9-99-999999-9" />
                    <h:outputLabel value="Preço:" for="preco" />
                    <p:inputText id="preco" value="#{livroBean.livro.preco}"
                        label="Preço">
                        <f:validateDoubleRange minimum="1.0" maximum="1000.0" />
                    </p:inputText>
                    <h:outputLabel value="Data de Lançamento:" for="dataLancamento" />
                    <p:calendar id="dataLancamento"
                        value="#{livroBean.livro.dataLancamento.time}"
                        pattern="dd/MM/yyyy/" timeZone="America/Sao_Paulo" />

                </h:panelGrid>
            </p:fieldset>

            <p:fieldset legend="Dados do Autor">
                <h:outputLabel value="Selecione " for="autor" />
                <p:commandLink value="ou cadastre novo autor"
                    action="#{livroBean.formAutor}" immediate="true" />
                <br />
                <h:selectOneMenu value="#{livroBean.autorId}" id="autor">
                    <f:selectItems value="#{livroBean.autores}" var="autor"
                        itemLabel="#{autor.nome}" itemValue="#{autor.id}" />
                </h:selectOneMenu>
                <br />
                <br />
                <p:commandButton value="Gravar Autor"
                    action="#{livroBean.gravarAutor}" process="@this autor"
                    update="tabelaAutores" />
                <p:dataTable value="#{livroBean.autoresDoLivro}" var="autor"
                    id="tabelaAutores" emptyMessage="Nenhum autor associado">
                    <p:column>
                        <h:outputText value="#{autor.nome}" />
                    </p:column>
                </p:dataTable>
            </p:fieldset>
            <p:commandButton value="Gravar" action="#{livroBean.gravar}"
                execute="@form" render="@form :tabelaLivros" />

        </h:form>
        <p:dataTable value="#{livroBean.livros}" var="livro" id="tabelaLivros"
            paginator="true" rows="4">
            <p:column>
                <f:facet name="header">Titulo</f:facet>
                <h:outputText value="#{livro.titulo}" />
            </p:column>
            <p:column>
                <f:facet name="header">ISBN</f:facet>
                <h:outputText value="#{livro.isbn}" />
            </p:column>
            <p:column>
                <f:facet name="header">Preço</f:facet>
                <h:outputText value="#{livro.preco}">
                    <f:convertNumber type="currency" pattern="R$ #0.00"
                        currencySymbol="R$" locale="pt_BR" />
                </h:outputText>
            </p:column>
            <p:column>
                <f:facet name="header">DATA</f:facet>
                <h:outputText value="#{livro.dataLancamento.time}">
                    <f:convertDateTime pattern="dd/MM/yyyy"
                        timeZone="America/Sao_Paulo" />
                </h:outputText>
            </p:column>

        </p:dataTable>

    </ui:define>
    <ui:define name="texto">
  Cadastro de Livros
  </ui:define>
</ui:composition>

</html>

nao resolveu nao. por exemplo o switch dos temas permanece desabilitado

Cole seu código o template. Abraço.

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

    <h:head />
        <h:body>
            <div id="cabecalho"> 
            <h:graphicImage library="img" name="logo.png" />
            <p:themeSwitcher value="#{temaBean.tema}" style="position: absolute; right: 10px"/>
            <f:selectItems value="#{temaBean.temas}"/>
            <h:form>
            <p:menubar>
                <p:submenu label="Cadastros">
                    <p:menuitem value="Autor" action="autor"/>
                    <p:separator />
                    <p:menuitem value="livro" action="livro"/>
                </p:submenu>
            </p:menubar>
            </h:form>
            <h1><ui:insert name="titulo"> </ui:insert> </h1>
            </div>
            <div id="conteudo" >
                <ui:insert name="conteudo"></ui:insert>
            </div>
            <div id="rodape">
  copyright 2012
  <ui:insert name="texto">
  </ui:insert>
</div>

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

    <h:head />
        <h:body>
            <div id="cabecalho"> 
            <h:graphicImage library="img" name="logo.png" />
            <p:themeSwitcher value="#{temaBean.tema}" style="position: absolute; right: 10px"/>
            <f:selectItems value="#{temaBean.temas}"/>
            <h:form>
            <p:menubar>
                <p:submenu label="Cadastros">
                    <p:menuitem value="Autor" action="autor"/>
                    <p:separator />
                    <p:menuitem value="livro" action="livro"/>
                </p:submenu>
            </p:menubar>
            </h:form>
            <h1><ui:insert name="titulo"> </ui:insert> </h1>
            </div>
            <div id="conteudo" >
                <ui:insert name="conteudo"></ui:insert>
            </div>
            <div id="rodape">
  copyright 2012
  <ui:insert name="texto">
  </ui:insert>
</div>

        </h:body>
    </html>
solução!

Agora sim! Descobri a causa do não aparecimento da combo com temas. Repare que o componente p:themeSwitcher precisa de uma lista de temas utilizando f:selectItems. Porém, repare que eu seu código a tag f:selecItems não é filha de p:themeSwicher. Só alterar a verificar o resultado!

Abraço

obrigado. agora terminei o curso... so mais uma coisa vou pro jstl ou hibernate antes?. abraços

Todos os dois caminhos são válidos, isso depende mesmo da sua motivação para aprender qualquer um deles.

Sucesso nessa caminhada!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software