Facelets + primefaces

oi galera,

gostaria de saber se tem como eu criar um template pra minha aplicacao web e fazer a aplicação só atualizar a parte central (onde fica o corpo), sem dar refresh no restante da pagina.

Usando facelets e primefaces, isso é possivel?

Se sim, alguem tem algum exemplo?

Valews

Bom eu nao sei se é o que vc quer, mas eu costumo fazer assim
Primeiro faço um template master onde vc pode colocar o cabeçalho e o rodape e configura como quer.

Seque codigo.

<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>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<ui:insert name="head" /> // caso queira colocar algum script 
</h:head>
 
<h:body>
	<div id="wrapper">
    	<div id="cabecalho">
    		<div id="corpo">
			<div id="conteudo">
				<ui:insert name="contend" /> //coloca-se o conteudo da pagina
			</div>
		</div>	
	</div>
</h:body>
</html>

Depois na página vc usa o template

<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>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</h:head> 
<h:body>

<ui:composition template="caminho do template"> //caminho do xhtml criado acima
	<ui:define name="head">
		<h:outputStylesheet name="home.css" library="css" /> // usa uma folha de estilo para configurar a parte central
	</ui:define>
	
	<ui:define name="header">
		
	      //colocar algo no cabeçalho	
		
	</ui:define>
	
	<ui:define name="contend">
		
		//define conteudo central da pagina
		 
	</ui:define>
</ui:composition>
</h:body>
</html>

Agora para atualizar somente o centro com o prime faces vc pode atualizar a


dando um update nela exemplo:
<p:commandButton   update=":conteudo"   />

Bom eu costumo fazer assim, espero ter ajudado e desculpe caso não tenha conseguido responder com a devida clareza

[]s

Oi Aten,

fazer desse jeito:

 update=":conteudo"

não funciona.

Ele nao acha esse id e estoura erro.

Unica forma de chamar algum componente fora do formulario, seria:

:form:conteudo

mas conteudo ta fora de qualquer form…então não tem jeito.

E se eu clico no meu, ele atualiza minha pagina toda.

Dai ele renderiza todo meu template.

e se utilizar os layouts do proprio prime ? ao invés de criar com div html ?

http://www.primefaces.org/showcase-labs/ui/layoutFull.jsf

outro questionamento:

meu projeto está assim:

http://localhost:8080/meuProjeto

o login, a pagina principal, algumas outras também.

mas qdo eu clico no menu…ele comeca a mostrar o endereco das paginas…ficando assim:

http://localhost:8080/meuProjeto/tipo_usuario.xhtml

não quero que isso ocorra…alguem sabe me dizer porque isso ocorre?

meu menu:

<h:form id="frmMenu"> <p:menu> <p:submenu label="Cadastros"> <p:menuitem value="Tipo Usuário" outcome="tipo_usuario.xhtml"/> </p:submenu> </p:menu> </h:form>

aix , estou usando…mesmo assim o problema é o mesmo

[quote=javaCBA]Oi Aten,

fazer desse jeito:

 update=":conteudo"

não funciona.

Ele nao acha esse id e estoura erro.

Unica forma de chamar algum componente fora do formulario, seria:

:form:conteudo

mas conteudo ta fora de qualquer form…então não tem jeito.

E se eu clico no meu, ele atualiza minha pagina toda.

Dai ele renderiza todo meu template.[/quote]

Na documentação do Prime Faces, na seção 4.1.2, tem um exemplo de como atualizar componentes

<h:form id="form1">
	
	 <p:commandButton update=":form2:display" />
	
</h:form>
<h:form id="form2">
	
	 <h:outputText id="display" value="#{bean.value}"/>
</h:form>

No meu código aqui, por exemplo, atualizo o form e o id que esta fora dele desta maneira.

<h:outputText id="bemvindo" value="usuarioBean.nome" />
<h:form id="formAtualizaNome">
     // formulario....
<p:commandButton update="formAtualizaNome, :bem-vindo"  action="#{usuarioBean.trocaNome()}"  />
</h:form>

Em relação a url de páginas, não sei tem algum modo de modificar, logo quando vc da um outcome ele vai procurar sua página na pasta WebConted.
Se tiver um jeito de não mostrar seria interessante.

[]

quando eu tento o :bemvindo (chamando pelo id diretamente) dá erro de id nao encontrado.

Só funciona chamando :form:componente

e quanto a url, no meu caso, não deve e não pode aparecer. Mas quando passo o outcome, ele exibe.

Nao consegui tirar isso