Andei pesquisando sobre frames em páginas JSF mas não consegui implementar nada.
Alguém pode me ajudar a implementar dois frames em páginas jsf? No frame esquerdo quero colocar um menu que ao ser clicado abra a respectiva página no frame direito.
Eu ñ disse q se deve usar. E disse é q dá p/ usar! Eu, particularmente, sou mais fã de divs, mas cada um tem o seu gosto.
R
rjbcordeiro
concordo com o raf4ever, vc precisa utilizar facelets, vc pode criar um template, que vai ter um topo, um menu e uma tela principal e todas as suas paginas seguirão o modelo do template
D
dev.rafael
Na verdade facelets ñ tem nada haver com isso, ele é apenas um framework de templates ñ de layout. Vc pode muito bem desenvolver um sistema web sem facelets e sem frames. Facelets ñ é uma solução p/ os layouts baseados em frames. Ele é uma solução, mas p/ outra coisa.
A
asandro1501
Pessoal, acho que não me expressei direito.
Abaixo tem um modelo de 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"><htmlxmlns="http://www.w3.org/1999/xhtml"xmlns:h="http://java.sun.com/jsf/html"xmlns:p="http://primefaces.prime.com.tr/ui"xmlns:ui="http://java.sun.com/jsf/facelets"><h:head></h:head><h:bodystyle="font-size: 10pt"><h:form><p:layoutfullPage="true"><p:layoutUnitposition="top"height="100"style="border-bottom-style: ridge"header="TOPO DO TEMPLATE"></p:layoutUnit><p:layoutUnitposition="left"width="250"header="Lado Esquerdo"style="border-bottom-style: ridge"><p:calendarmode="inline"/></p:layoutUnit><p:layoutUnitposition="center"width="250"header="Centro"style="border-bottom-style: ridge"></p:layoutUnit><p:layoutUnitposition="right"width="150"header="Lado Direito"style="border-bottom-style: ridge"></p:layoutUnit></p:layout></h:form></h:body></html>
O problema é que eu não sei como usar, preciso colocar a página menu.xhtml no LADO ESQUERDO e a página home.xhtml no CENTRO. No menu.xhtml existem botões que abrem outras páginas, gostaria que estas páginas abrissem no CENTRO também.
Obrigado pela atenção
A
asandro1501
asandro1501:
Pessoal, acho que não me expressei direito.
Abaixo tem um modelo de 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"><htmlxmlns="http://www.w3.org/1999/xhtml"xmlns:h="http://java.sun.com/jsf/html"xmlns:p="http://primefaces.prime.com.tr/ui"xmlns:ui="http://java.sun.com/jsf/facelets"><h:head></h:head><h:bodystyle="font-size: 10pt"><h:form><p:layoutfullPage="true"><p:layoutUnitposition="top"height="100"style="border-bottom-style: ridge"header="TOPO DO TEMPLATE"></p:layoutUnit><p:layoutUnitposition="left"width="250"header="Lado Esquerdo"style="border-bottom-style: ridge"><p:calendarmode="inline"/></p:layoutUnit><p:layoutUnitposition="center"width="250"header="Centro"style="border-bottom-style: ridge"></p:layoutUnit><p:layoutUnitposition="right"width="150"header="Lado Direito"style="border-bottom-style: ridge"></p:layoutUnit></p:layout></h:form></h:body></html>
O problema é que eu não sei como usar, preciso colocar a página menu.xhtml no LADO ESQUERDO e a página home.xhtml no CENTRO. No menu.xhtml existem botões que abrem outras páginas, gostaria que estas páginas abrissem no CENTRO também.
Obrigado pela atenção
Olá pessoal
Alguma sujestão?
Obrigado
R
rjbcordeiro
tem várias formas de fazer, vc pode fazer o seguinte:
1: bom o menu vai incluir no proprio template , no menu vai ter links e tals e ui:composition
ps.: o que for comum para todas as páginas vc coloca no proprio template
2: todas as paginas usaram o template e vc só mudará o centro.
ps2.: vc pode usar framework em java com ajax para mudar as páginas sem dar um refresh na página toda, assim vc ganha mais performance. Richfaces, jsf2 , ajax4jsf bom vc tem que ver qual melhor se aplica em sua situação.
A
asandro1501
Então são as páginas que recebem o template e não o template que recebe as páginas?
R
rjbcordeiro
sim, as páginas tipo usuario.xhtml é que no cabeçalho dele vai ter o nome do template de sua aplicação
Valeu pela ajuda até agora, só não entendi como fazer para que o conteúdo das outras página apareça no centro.
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"><htmlxmlns="http://www.w3.org/1999/xhtml"xmlns:h="http://java.sun.com/jsf/html"xmlns:p="http://primefaces.prime.com.tr/ui"xmlns:f="http://java.sun.com/jsf/core"xmlns:ui="http://java.sun.com/jsf/facelets"><h:head><title><ui:insertname="title">SISP - Sistema Integrado de Saúde Pública</ui:insert></title></h:head><h:bodystyle="font-size: 10pt"><h:form><p:layoutfullPage="true"><p:layoutUnitposition="top"height="50"header="TOPO DO TEMPLATE"></p:layoutUnit><p:layoutUnitposition="left"width="250"header="Menu"><ui:includesrc="menu.xhtml"/></p:layoutUnit><p:layoutUnitposition="center"header="Centro"></p:layoutUnit><p:layoutUnitposition="right"width="200"header="Lado Direito"><p:calendarmode="inline"/></p:layoutUnit></p:layout></h:form></h:body></html>
menu.xhtml
<?xml version="1.0" encoding="UTF-8"?><!--To change this template, choose Tools | Templatesand open the template in the editor.--><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"xmlns:h="http://java.sun.com/jsf/html"xmlns:p="http://primefaces.prime.com.tr/ui"xmlns:f="http://java.sun.com/jsf/core"><body><h:formid="form"><h3>Menu</h3><p:menustyle="width:200px"><p:submenulabel="Pacientes"><p:menuitemvalue="Cadastro"icon="/img/paciente16.png"url="InserePaciente.jsf"/><p:menuitemvalue="Busca"icon="/img/busca16.png"url="BuscaPaciente.jsf"/></p:submenu></p:menu></h:form></body></html>
index.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"><htmlxmlns="http://www.w3.org/1999/xhtml"xmlns:h="http://java.sun.com/jsf/html"xmlns:p="http://primefaces.prime.com.tr/ui"xmlns:ui="http://java.sun.com/jsf/facelets"xmlns:f="http://java.sun.com/jsf/core"><h:head><ui:compositiontemplate="template.xhtml"/></h:head></html>
algo mais ou menos assim, vê que no cabeçalho eu não coloquei mais <html …
A
asandro1501
Olá
Inevitavelmente ainda tenho que te incomodar mais um pouco. Alterei os códigos mas tá dando uns erros e ainda não tá aparecendo a página requisitada.
To chamando o template direto agora.
template.xhtml
<htmlxmlns="http://www.w3.org/1999/xhtml"xmlns:h="http://java.sun.com/jsf/html"xmlns:p="http://primefaces.prime.com.tr/ui"xmlns:f="http://java.sun.com/jsf/core"xmlns:ui="http://java.sun.com/jsf/facelets"><h:head><title><ui:insertname="title">SISP-SistemaIntegradodeSaúdePública</ui:insert></title></h:head><h:bodystyle="font-size: 12pt"><h:form><p:layoutfullPage="true"><p:layoutUnitposition="top"height="50"header="TOPO DO TEMPLATE"></p:layoutUnit><p:layoutUnitposition="left"width="250"header="Menu"><ui:includesrc="menu.xhtml"/></p:layoutUnit><p:layoutUnitposition="center"header="Centro"></p:layoutUnit><p:layoutUnitposition="right"width="200"header="Lado Direito"><p:calendarmode="inline"/></p:layoutUnit></p:layout></h:form></h:body></html>
<ui:compositionxmlns="http://www.w3.org/1999/xhtml"xmlns:h="http://java.sun.com/jsf/html"xmlns:p="http://primefaces.prime.com.tr/ui"xmlns:f="http://java.sun.com/jsf/core"xmlns:ui="http://java.sun.com/jsf/facelets"><body><h:formid="form"><p:menustyle="width:200px"><p:submenulabel="Pacientes"><p:menuitemvalue="Cadastro"icon="/img/paciente16.png"url="InserePaciente.jsf"/><p:menuitemvalue="Busca"icon="/img/busca16.png"url="BuscaPaciente.jsf"/><p:menuitemvalue="Teste de Chamada"icon="/img/busca16.png"url="teste.jsf"/></p:submenu></p:menu></h:form></body></ui:composition>
Você tem o título de algum livro que seja bom sobre o assunto?
Obrigado mais uma vez
R
rjbcordeiro
bom aos poucos vamos resolvendo seus problemas. percebi mais alguns:
1- se seu template tem o form, não é recomendado vc colocar //do template do cliente de seu template, ou seja, não pode ter form dentro de form. Ou vc coloca nos clientes do template ou vc coloca no template
2- nos clientes vc tb não precisa da tag , ve só quando a pagina que usa o template é aberta no browser , é como se fosse um arquivo só, tipo o padrão composite view. Uma pagina html é recomendado que tenha apenas uma tag uma tag pois na hora do browser interpretar o código ele pode ou demorar para interpretar ou interpretar de forma errada e se tiver css é que piora tudo, então tem que se ter cuidado na hora de se usar o template e fazer com que no final seja criada uma página html de forma correta.
tenta tirar a tag do menu e do inserePaciente
R
rjbcordeiro
eu estava dando uma pesquisada sobre layouts com o primefaces, e acho que no seu templete esta faltando:
o que vc precisa fazer é unir a forma de layout do primefaces com o composite view do facelets
no seu TEMPLATE.XHTMLvc utiliza vc utiliza o layout do primefaces e onde ficar cada local vc vai colocar:
ex.:
<!-- onde for o topo das páginas --><ui:insertname="top">Top</ui:insert><!-- onde for o lado esquerdo --><ui:insertname="left">Left</ui:insert><!-- onde for o centro --><ui:insertname="content">Content</ui:insert>
Só lembrando que no facelets vc pode colocar o nome que quizer e pode ir dividindo quantas vezes quizer.
nas páginas cliente do modelo (template ) vc vai fazer:
INSERECLIENTE.XHTML
<!-- onde for o topo do cliente --><ui:definename="top"></ui:define><!-- a parte esquerda deste cliente --><ui:definename="left"></ui:define><!-- aqui o conteudo do cliente, a parte do centro --><ui:definename="content"></ui:define>
lembrando que se o topo for igual para todos , só precisa no template e a mesma coisa para a parte esquerda ( tipo o menu ) e todos os clientes só precisam do ui:composition
bom qualquer coisa posta ai
A
asandro1501
Boa tarde
Quero agradecer pela sua enorme ajuda.
Andei pesquisando também, e é possível fazer somente com
, esta tag permite configurações como alinhamento, bordas, etc.
Valeu pelas dicas de limpeza dos códigos como os
e . Quanto aos , eles são necessários dependendo dos outros componentes utilizados nas páginas como os .
Eu acabei utilizando o layout do primefaces, as tags de referência das páginas e as tags
pra dar uma ajeitada. Não sei se é a melhor maneira de utilizar este conjunto mas agora que eu entendi o que cada um faz ficou bem mais fácil.
Segue abaixo o exemplo dos códigos, espero que ajude alguém com isso.