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!