Como chamar um método do bean depois da página ser carregada sem precisar de botão ou link?

2,400 views
Skip to first unread message

Valdemar

unread,
Jun 19, 2009, 4:04:50 PM6/19/09
to javasf: JavaServer Faces International Group
Fala galera! Blz?!

Eu estou com um problema: tenho uma página HXTML (Facelets + JSF +
RichFaces) que possui um panelGrid com binding em um bean. Ou seja, a
partir do bean eu pretendo inserir elementos (widgets) JSF neste
painel. Eu consegui fazer isso através da ação de um botão. Mas ficou
muito tosco porque eu carregava a interface, pressionava o botão e só
então a interface aparecia. Existe uma forma de chamar um método que
vai carregar estes widgets no painel logo após a interface terminar de
carregar pela primeira vez? Eu andei olhando JSTL, tentei olhar
tutoriais e tópicos do GUJ, mas eu só achei JSTL com JSF quando está-
se mencionando estruturas de controle como IF e WHEN e quando é apenas
para imprimir o valor de uma propriedade no bean, não para executar um
método. Se alguém puder me ajudar, agradeço!

Flávio Castro

unread,
Jun 19, 2009, 4:18:31 PM6/19/09
to jav...@googlegroups.com
Vc pode fazer uma a4j:jsFunction e chamá-la no final do documento.

2009/6/19 Valdemar <valdema...@gmail.com>



--
Flávio Castro

Valdemar

unread,
Jun 19, 2009, 4:23:49 PM6/19/09
to javasf: JavaServer Faces International Group
Na verdade eu até cheguei a tentar isso, mas não deu certo! Eu
coloquei para chamar o método através de um onLoad no body do
template. Como onLoad só dá para utilizar na tag body e a página que
implementa o template Facelets não possui body, aí num dá para usar.
Pelo menos eu não consegui usar. Você poderia fornecer um exemplo?
Talvez eu é que não estou sabendo usar. Mesmo assim, eu acho estranho
utilizar isso porque eu vou invocar o método de um bean em uma tag que
aparentemente serve para invocar métodos JavaScript?

On 19 jun, 17:18, Flávio Castro <flahviocas...@gmail.com> wrote:
> Vc pode fazer uma a4j:jsFunction e chamá-la no final do documento.
>
> 2009/6/19 Valdemar <valdemar.net...@gmail.com>
> Flávio Castro- Ocultar texto das mensagens anteriores -
>
> - Mostrar texto das mensagens anteriores -

Flávio Castro

unread,
Jun 19, 2009, 4:35:12 PM6/19/09
to jav...@googlegroups.com
O jsFunction é exatamente para isso, chamar um metodo no bean, onde teoricamente vc só pode usar javascript.

Pensando rapidamente no seu caso, vejo duas soluçoes:
1) vc teria que criar no template, um <ui:insert> no final do documento, lá antes do fechamento da tag body, e na sua página, vc iria definir este insert, criando a o jsFunction e depois chamando tipo:
<script>
    suaFuncao();
</script>
entao no final do carregamento da pagina, seria chamado sua funcao.

2) ou definir na tag onload do body do seu template um param, tipo <body onLoad="#{paramOnload}"
e na sua página, vc definir este parametro com <ui:param name="paramOnload" value="suaFuncao();"/>
entao o proprio body iria chamar apos o carregamento da pagina.



2009/6/19 Valdemar <valdema...@gmail.com>



--
Flávio Castro

Rogerio Pereira

unread,
Jun 19, 2009, 4:53:26 PM6/19/09
to jav...@googlegroups.com
O JSF 2.0 possui suporte para este tipo de comportamento, tal como apps que rodam com o Spring 2.5, basta anotar o método desejado no seu bean usando @PostConstruct. Que indica que o método deverá ser invocado logo após a instanciação do seu bean.

2009/6/19 Flávio Castro <flahvi...@gmail.com>



--
Regards,

Rogério (_rogerio_)

[Blog: http://faces.eti.br] [Twitter: http://twitter.com/ararog]

"Faça a diferença! Ajude o seu país a crescer, não retenha conhecimento, distribua e aprenda mais."
(http://faces.eti.br/2006/10/30/conhecimento-e-amadurecimento)

Valdemar

unread,
Jun 19, 2009, 5:02:13 PM6/19/09
to javasf: JavaServer Faces International Group
E aí galera?!

Rogério, obrigado pela sugestão. É ótimo saber que este tipo de
comportamento está sendo incluído. Mas eu estou utilizando JSF 1.2 e
não posso migrar agora.

E quanto às suas sugestões, Flávio, eu realmente agradeço muito, mas
infelizmente ainda não consegui fazer funcionar. No primeiro caso,
acusou PropertyNotFound, algo assim, porque interpretou a chamada de
método como um acesso a uma propriedade no bean. Talvez eu também não
esteja acertando na sintaxe. Vou postar aqui os códigos para você ver
o que está acontecendo e talvez poder me ajudar.

Outra coisa: me diz onde você estudou Facelets, porque eu nem mesmo
sabia da existência deste recurso. Estou percebendo que devo estudar
mais.

Aqui estão os códigos:

1) Template:

<!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:ui="http://java.sun.com/jsf/facelets">
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1" />
<title>Uso de Templates com Facelets</title>
<style type="text/css">
<!--
body {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: small;
}
-->
</style>

</head>

<body onload="#{paramOnload}">

<table border="1">
<tr><td>
<ui:insert name="menuAtributo">Default Title</ui:insert>

</td>
<td>
<ui:insert name="conteudoAtributo">Default Title</ui:insert>
</td>
</tr>
<tr>
<td colspan="2">
<ui:insert name="botoes">
<ui:param name="paramOnload" value="Pais.verificaCampo();"/>

</ui:insert>
</td>
</tr>
</table>

</body>

</html>


2) pais.xhtml (implementa o template)

<?xml version="1.0" encoding="ISO-8859-1"?>

<!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:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:t="http://myfaces.apache.org/tomahawk"
xmlns:c="http://java.sun.com/jstl/core"
xmlns:a4j="https://ajax4jsf.dev.java.net/ajax">




<ui:composition template="./template2.xhtml">

<h:messages globalOnly="true" />
<ui:define name="menuAtributo">
<ul>
<li>Cadastro de País</li>
</ul>

</ui:define>

<ui:define name="conteudoAtributo">


<div style="overflow:auto; height:300px;">

<!-- Utilizar tabela de dados do JSF para dar aparência para
a tela -->

<!-- Coloca SCROLL aqui. -->
<h:form id="formPais">

<h:commandButton type="submit" id="botao" value="Gerar
Interface" action="#{Pais.verificaCampo}">
</h:commandButton>


<h:panelGrid id="painelPais" binding="#{Pais.painel}"
columns="2" border="1" cellspacing="0">
</h:panelGrid>

<br/>
<h:commandButton type="submit" id="botao2" value="Submeter Valores"
action="#{Pais.cadastra}">
</h:commandButton>


</h:form>

</div>

</ui:define>

<ui:define name="botoes">
<center>
<h:form>
<h:outputText value="Uepa"/>

</h:form>
</center>
</ui:define>


</ui:composition>

</html>


A ideia no caso seria suprimir o botão com valor "Gera Interface"
deste último código, deixando apenas a chamada para geração da
interface.

Desde já, obrigado!

On 19 jun, 17:53, Rogerio Pereira <rogerio.ara...@gmail.com> wrote:
> O JSF 2.0 possui suporte para este tipo de comportamento, tal como apps que
> rodam com o Spring 2.5, basta anotar o método desejado no seu bean usando
> @PostConstruct. Que indica que o método deverá ser invocado logo após a
> instanciação do seu bean.
>
> 2009/6/19 Flávio Castro <flahviocas...@gmail.com>
>
>
>
>
>
> > O jsFunction é exatamente para isso, chamar um metodo no bean, onde
> > teoricamente vc só pode usar javascript.
>
> > Pensando rapidamente no seu caso, vejo duas soluçoes:
> > 1) vc teria que criar no template, um <ui:insert> no final do documento, lá
> > antes do fechamento da tag body, e na sua página, vc iria definir este
> > insert, criando a o jsFunction e depois chamando tipo:
> > <script>
> >     suaFuncao();
> > </script>
> > entao no final do carregamento da pagina, seria chamado sua funcao.
>
> > 2) ou definir na tag onload do body do seu template um param, tipo <body
> > onLoad="#{paramOnload}"
> > e na sua página, vc definir este parametro com <ui:param name="paramOnload"
> > value="suaFuncao();"/>
> > entao o proprio body iria chamar apos o carregamento da pagina.
>
> > 2009/6/19 Valdemar <valdemar.net...@gmail.com>
> (http://faces.eti.br/2006/10/30/conhecimento-e-amadurecimento)- Ocultar texto das mensagens anteriores -

Rodrigo Aguas

unread,
Jun 19, 2009, 5:14:31 PM6/19/09
to jav...@googlegroups.com

Eu utilizo @PostConstruct no JSF 1.2 e funciona.

Rodrigo Aguas


2009/6/19 Valdemar <valdema...@gmail.com>

Valdemar

unread,
Jun 19, 2009, 5:49:07 PM6/19/09
to javasf: JavaServer Faces International Group
Uai cara, sério! No caso qual a sintaxe disso aí? Eu coloco antes do
construtor ou antes do próprio método?
Tem jeito de você indicar algum material para estudar isso?

Obrigado!

On 19 jun, 18:14, Rodrigo Aguas <rodrigo.ag...@gmail.com> wrote:
> Eu utilizo @PostConstruct no JSF 1.2 e funciona.
>
> Rodrigo Aguas
>
> 2009/6/19 Valdemar <valdemar.net...@gmail.com>
> > > (http://faces.eti.br/2006/10/30/conhecimento-e-amadurecimento)-<http://faces.eti.br/2006/10/30/conhecimento-e-amadurecimento%29->Ocultar texto das mensagens anteriores -
>
> > > - Mostrar texto das mensagens anteriores -- Ocultar texto das mensagens anteriores -

Rogerio Pereira

unread,
Jun 19, 2009, 5:52:24 PM6/19/09
to jav...@googlegroups.com
Coloque antes do método que lhe interessa executar.

2009/6/19 Valdemar <valdema...@gmail.com>

Valdemar

unread,
Jun 20, 2009, 9:42:07 AM6/20/09
to javasf: JavaServer Faces International Group
Eita nóis!

Infelizmente, não funcionou também! Deu um erro lá na hora de carregar
o bean. Até porque eu não sei como acontece o deployment, mas eu acho
que quando acabou de instanciar o bean, ainda não foi carregada a
interface. Logo, o que eu queria fazer me mexer na interface não
funciona.
Mas valeu aí!

On 19 jun, 18:52, Rogerio Pereira <rogerio.ara...@gmail.com> wrote:
> Coloque antes do método que lhe interessa executar.
>
> 2009/6/19 Valdemar <valdemar.net...@gmail.com>
> (http://faces.eti.br/2006/10/30/conhecimento-e-amadurecimento)- Ocultar texto das mensagens anteriores -

Rogerio Pereira

unread,
Jun 20, 2009, 9:52:05 AM6/20/09
to jav...@googlegroups.com
Olha os logs com cuidado e poste o stacktrace.

2009/6/20 Valdemar <valdema...@gmail.com>

Valdemar

unread,
Jun 20, 2009, 10:05:50 AM6/20/09
to javasf: JavaServer Faces International Group
Logs:

javax.faces.FacesException:
com.sun.faces.mgbean.ManagedBeanCreationException: An error occurred
performing resource injection on managed bean Pais
at com.sun.faces.application.ApplicationImpl.createComponent
(ApplicationImpl.java:251)
at com.sun.facelets.tag.jsf.ComponentHandler.createComponent
(ComponentHandler.java:224)
at com.sun.facelets.tag.jsf.ComponentHandler.apply
(ComponentHandler.java:139)
at com.sun.facelets.tag.CompositeFaceletHandler.apply
(CompositeFaceletHandler.java:47)
at com.sun.facelets.tag.jsf.ComponentHandler.applyNextHandler
(ComponentHandler.java:314)
at com.sun.facelets.tag.jsf.ComponentHandler.apply
(ComponentHandler.java:169)
at com.sun.facelets.tag.CompositeFaceletHandler.apply
(CompositeFaceletHandler.java:47)
at com.sun.facelets.tag.ui.DefineHandler.apply(DefineHandler.java:58)
at com.sun.facelets.tag.ui.CompositionHandler.apply
(CompositionHandler.java:128)
at com.sun.facelets.impl.DefaultFaceletContext$TemplateManager.apply
(DefaultFaceletContext.java:306)
at com.sun.facelets.impl.DefaultFaceletContext.includeDefinition
(DefaultFaceletContext.java:279)
at com.sun.facelets.tag.ui.InsertHandler.apply(InsertHandler.java:68)
at com.sun.facelets.tag.CompositeFaceletHandler.apply
(CompositeFaceletHandler.java:47)
at com.sun.facelets.compiler.NamespaceHandler.apply
(NamespaceHandler.java:49)
at com.sun.facelets.tag.CompositeFaceletHandler.apply
(CompositeFaceletHandler.java:47)
at com.sun.facelets.compiler.EncodingHandler.apply
(EncodingHandler.java:25)
at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:
248)
at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:
294)
at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:
273)
at com.sun.facelets.impl.DefaultFaceletContext.includeFacelet
(DefaultFaceletContext.java:143)
at com.sun.facelets.tag.ui.CompositionHandler.apply
(CompositionHandler.java:113)
at com.sun.facelets.compiler.NamespaceHandler.apply
(NamespaceHandler.java:49)
at com.sun.facelets.compiler.EncodingHandler.apply
(EncodingHandler.java:25)
at com.sun.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:95)
at com.sun.facelets.FaceletViewHandler.buildView
(FaceletViewHandler.java:503)
at com.sun.facelets.FaceletViewHandler.renderView
(FaceletViewHandler.java:546)
at org.ajax4jsf.application.ViewHandlerWrapper.renderView
(ViewHandlerWrapper.java:108)
at org.ajax4jsf.application.AjaxViewHandler.renderView
(AjaxViewHandler.java:189)
at com.sun.faces.lifecycle.RenderResponsePhase.execute
(RenderResponsePhase.java:109)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:
139)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter
(ApplicationFilterChain.java:206)
at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:
154)
at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:260)
at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest
(BaseFilter.java:366)
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:493)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter
(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke
(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke
(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke
(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke
(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke
(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service
(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process
(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol
$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:
454)
at java.lang.Thread.run(Unknown Source)
Caused by: com.sun.faces.mgbean.ManagedBeanCreationException: An error
occurred performing resource injection on managed bean Pais
at com.sun.faces.mgbean.BeanBuilder.invokePostConstruct
(BeanBuilder.java:229)
at com.sun.faces.mgbean.BeanBuilder.build(BeanBuilder.java:108)
at com.sun.faces.mgbean.BeanManager.createAndPush(BeanManager.java:
368)
at com.sun.faces.mgbean.BeanManager.create(BeanManager.java:222)
at com.sun.faces.el.ManagedBeanELResolver.getValue
(ManagedBeanELResolver.java:88)
at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
at com.sun.faces.el.FacesCompositeELResolver.getValue
(FacesCompositeELResolver.java:72)
at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:61)
at org.apache.el.parser.AstValue.getValue(AstValue.java:107)
at org.apache.el.ValueExpressionImpl.getValue
(ValueExpressionImpl.java:186)
at com.sun.facelets.el.TagValueExpression.getValue
(TagValueExpression.java:71)
at com.sun.faces.application.ApplicationImpl.createComponent
(ApplicationImpl.java:240)
... 49 more


On 20 jun, 10:52, Rogerio Pereira <rogerio.ara...@gmail.com> wrote:
> Olha os logs com cuidado e poste o stacktrace.
>
> 2009/6/20 Valdemar <valdemar.net...@gmail.com>
> ...
>
> mais »- Ocultar texto das mensagens anteriores -

Rogerio Pereira

unread,
Jun 20, 2009, 11:11:16 AM6/20/09
to jav...@googlegroups.com
Realmente não está dizendo muito. Como você inseriu a anotação, tem como mostrar o código junto com os importações da classe?

2009/6/20 Valdemar <valdema...@gmail.com>

Joel Lobo

unread,
Jun 20, 2009, 4:27:58 PM6/20/09
to jav...@googlegroups.com
Para o @PostConstruct funcionar vc precisa utilizar um app server/web container que implemente
a especificação Servlet 2.5 (parte da especificação Java EE 5). Por exemplo, o Tomcat 5 não implementa mas o Tomcat 6 implementa.

att,
--------------------------------------------------------
Joel Lobo
blogdojoellobo.blogspot.com
twitter.com/joellobo
--------------------------------------------------------
















2009/6/20 Rogerio Pereira <rogerio...@gmail.com>

Valdemar

unread,
Jun 21, 2009, 9:17:56 AM6/21/09
to javasf: JavaServer Faces International Group
Fala Joel! Eu estou usando Tomcat 6, portanto há suporte. E Rogerio,
desculpe a demora:
aqui está a forma como coloquei a anotação:

package beans;

import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
import java.util.Vector;

import javax.annotation.PostConstruct;
import javax.el.ExpressionFactory;
import javax.el.ValueExpression;
import javax.faces.model.SelectItem;
import javax.faces.application.Application;
import javax.faces.component.UIComponent;
import javax.faces.component.UIInput;
import javax.faces.component.UIOutput;
import javax.faces.component.UIPanel;
import javax.faces.component.UISelectItem;
import javax.faces.component.UISelectItems;
import javax.faces.component.UISelectOne;
import javax.faces.component.UIViewRoot;
import javax.faces.component.html.*;
import javax.faces.context.FacesContext;
import javax.faces.convert.IntegerConverter;
import javax.faces.el.ValueBinding;
import javax.faces.event.ActionEvent;

import camadaAplicacao.AplicacaoCadastro;
import camadaInterfaceAplicacao.ObjetoApresentacao;
import camadaInterfaceAplicacao.TipoFuncao;

import metadados.Metadados;
import metadados.atributos.AtributoSimplesEnumerado;
import metadados.tipos.TipoAtributo;
import idiomas.*;
import camadaInterfaceAplicacao.*;
import camadaInterfaceAplicacao.estruturaMenu.ItemMenu;


public class Pais
{

private int codigo;
private String nomePais;
private HtmlPanelGrid painel;
private InterfaceAplicacaoCadastroWeb iacw;
private boolean mostra;
private LinkedList<String> nomesPaises;
private Metadados m;
private LinkedList<SelectItem> listaPaises;



public Pais()
{
this.mostra = Boolean.FALSE;
iacw = new InterfaceAplicacaoCadastroWeb("EnumTipoEntPais");
m = iacw.obterMetadados("EnumTipoEntPais");
}

public LinkedList<String> getNomesPaises()
{
nomesPaises = new LinkedList<String>();
AtributoSimplesEnumerado at = ((AtributoSimplesEnumerado)
m.obterAtributoEm("nomePais"));
Vector v = at.obterDadosEnum();
Idioma a = new Idioma();



for(int j = 0; j < v.size(); j++)
{
nomesPaises.add(a.obterEnumResourceBundle().getString((String) v.get
(j)));
}


return nomesPaises;
}

public void setNomesPaises(LinkedList<String> nomesPaises) {
this.nomesPaises = nomesPaises;
}


public boolean isMostra() {
return mostra;
}


public void setMostra(boolean mostra) {
this.mostra = mostra;
}

@PostConstruct
public String verificaCampo()
{
this.mostra = Boolean.TRUE;
this.montaPagina();
return "";
}


(... possui mais código, mas isso é o suficiente)

On 20 jun, 17:27, Joel Lobo <joell...@gmail.com> wrote:
> Para o @PostConstruct funcionar vc precisa utilizar um app server/web
> container que implemente
> a especificação Servlet 2.5 (parte da especificação Java EE 5). Por exemplo,
> o Tomcat 5 não implementa mas o Tomcat 6 implementa.
>
> att,
> --------------------------------------------------------
> Joel Lobo
> blogdojoellobo.blogspot.com
> twitter.com/joellobo
> --------------------------------------------------------
>
> 2009/6/20 Rogerio Pereira <rogerio.ara...@gmail.com>
>
>
>
> > Realmente não está dizendo muito. Como você inseriu a anotação, tem como
> > mostrar o código junto com os importações da classe?
>
> > 2009/6/20 Valdemar <valdemar.net...@gmail.com>

Rafael Ponte

unread,
Jun 21, 2009, 11:32:37 AM6/21/09
to jav...@googlegroups.com
Joel,

Até onde sei o Tomcat 6 não possui suporte a @PostConstruct e algumas outras anotações.

2009/6/20 Joel Lobo <joel...@gmail.com>



--
Rafael Ponte
http://www.rponte.com.br

Valdemar

unread,
Jun 21, 2009, 2:06:07 PM6/21/09
to javasf: JavaServer Faces International Group
Rafael, você não teria uma solução para o meu problema? Eu preciso de
carregar a interface (os widgets dentro de um panelGrid) logo após a
interface ser carregada, de forma automática. Ou seja, eu precisaria
de um mecanismo para chamar o método que carrega os widgets no painel
logo após a interface ter sido carregada! Você conhece algo que faça
isso?

On 21 jun, 12:32, Rafael Ponte <rpo...@gmail.com> wrote:
> Joel,
>
> Até onde sei o Tomcat 6 não possui suporte a @PostConstruct e algumas outras
> anotações.
>
> 2009/6/20 Joel Lobo <joell...@gmail.com>
>
>
>
> > Para o @PostConstruct funcionar vc precisa utilizar um app server/web
> > container que implemente
> > a especificação Servlet 2.5 (parte da especificação Java EE 5). Por
> > exemplo, o Tomcat 5 não implementa mas o Tomcat 6 implementa.
>
> > att,
> > --------------------------------------------------------
> > Joel Lobo
> > blogdojoellobo.blogspot.com
> > twitter.com/joellobo
> > --------------------------------------------------------
>
> > 2009/6/20 Rogerio Pereira <rogerio.ara...@gmail.com>
>
> > Realmente não está dizendo muito. Como você inseriu a anotação, tem como
> >> mostrar o código junto com os importações da classe?
>
> >> 2009/6/20 Valdemar <valdemar.net...@gmail.com>

Rogerio Pereira

unread,
Jun 21, 2009, 2:33:32 PM6/21/09
to jav...@googlegroups.com
Você pode encontrar maiores informações sobre o uso do @PostConstruct aqui:

http://java.sun.com/developer/technicalArticles/J2EE/injection/ tando o Ryan Lubke quanto o Ed Burns, responsáveis pela implementação de referência do JSF afirmam que essa característica de injeção de dependência do EJB está disponível para o JSF 1.2 através do JEE 5.

2009/6/21 Valdemar <valdema...@gmail.com>

Rogerio Pereira

unread,
Jun 21, 2009, 2:36:54 PM6/21/09
to jav...@googlegroups.com
No blog do Jacob Hookom, criador do Facelets ele afirma:

With the JSF 1.2 RI, you can get the pre/post events outside of a Java EE 5 container by simply having the annotations.jar in your classpath.

Como informado neste post:

Flávio Castro

unread,
Jun 22, 2009, 8:32:42 AM6/22/09
to jav...@googlegroups.com
Valdemar,

Desculpa a demora para responder, mas o erro está aqui:


<ui:param name="paramOnload" value="Pais.verificaCampo();"/>

este value, deve chamar sua a4j:funcion, e nao direto o seu metodo do bean.

Vou exemplificar como deveria fazer:

<!-- funcao chamada no onload da página -->
<a4j:jsFunction name="onLoadForm"
actionListener="#{SeuBean.seuMetodo}"
ignoreDupResponses="true" immediate="true" ajaxSingle="true" />

e logo depois vc definiria o param desse jeito:

<ui:param name="paramOnload" value="onLoadForm();"/>

Quando a tela for carregada, o body chamara o onload, que chamara esta jsFuncion, que entao fará uma chamada ajax para o seu bean.

Espero que tenha entendido.
Qualquer dúvida é só falar.

Att,
Flávio Castro

PS: Sobre o curso de facelets, fiz não! Foi mais tentando, usando e vendo o que ele podia oferecer. E lógico que o bom e velho google.

2009/6/19 Valdemar <valdema...@gmail.com>



--
Flávio Castro

Rafaell Pinheiro

unread,
Jun 22, 2009, 1:25:22 PM6/22/09
to jav...@googlegroups.com
Acho que nao tem mais maneira simples do que isso:
em sua tag h:form coloque um binding="#{seuBean.propriedadetipoHtmlForm}"
no seu Bean declare a propriedade form como um HtmlForm e seus devidos getters and setters....
pronto... so colocar teu trecho de codigo que quer exibidir sempre ao carregar uma pagina no get desta propriedade...
abs
Rafaell

2009/6/22 Flávio Castro <flahvi...@gmail.com>



--
Rafaell Pinheiro Sousa

Valdemar

unread,
Jun 22, 2009, 3:12:50 PM6/22/09
to javasf: JavaServer Faces International Group
Fala galera! Eu quero agradecer a todos os que me sugeriram soluções
aqui!
Infelizmente, eu ainda estou bem cru e iniciante em RichFaces, e
consequentemente, em a4j. Logo, eu até tentei fazer alguns exemplos
mas acabaram não sendo bem sucedidos.
Sendo assim, eu tentei solucionar com a sugestão do Rafaell Pinheiro.
Percebo que esta é uma solução simples, mas às vezes o stress não nos
deixa ver o óbvio. Eu tentei e funcionou. Tudo bem que não aprendi
ainda como chamar um método sem apertar botão algum, ou pelo menos
ainda não consegui fazer isso, mas assim que tiver um tempinho, vou
testar o que o Flávio sugeriu aqui. Eu agradeço de verdade a todos que
me ajudaram aqui.

Valeus!

On 22 jun, 14:25, Rafaell Pinheiro <rafael...@gmail.com> wrote:
> Acho que nao tem mais maneira simples do que isso:
> em sua tag h:form coloque um binding="#{seuBean.propriedadetipoHtmlForm}"
> no seu Bean declare a propriedade form como um HtmlForm e seus devidos
> getters and setters....
> pronto... so colocar teu trecho de codigo que quer exibidir sempre ao
> carregar uma pagina no get desta propriedade...
> abs
> Rafaell
>
> 2009/6/22 Flávio Castro <flahviocas...@gmail.com>
>
>
>
>
>
> > Valdemar,
>
> > Desculpa a demora para responder, mas o erro está aqui:
>
> > <ui:param name="paramOnload" value="Pais.verificaCampo();"/>
>
> > este value, deve chamar sua a4j:funcion, e nao direto o seu metodo do bean.
>
> > Vou exemplificar como deveria fazer:
>
> > <!-- funcao chamada no onload da página -->
> > <a4j:jsFunction name="onLoadForm"
> > actionListener="#{SeuBean.seuMetodo}"
> > ignoreDupResponses="true" immediate="true" ajaxSingle="true" />
>
> > e logo depois vc definiria o param desse jeito:
>
> > <ui:param name="paramOnload" value="onLoadForm();"/>
>
> > Quando a tela for carregada, o body chamara o onload, que chamara esta
> > jsFuncion, que entao fará uma chamada ajax para o seu bean.
>
> > Espero que tenha entendido.
> > Qualquer dúvida é só falar.
>
> > Att,
> > Flávio Castro
>
> > PS: Sobre o curso de facelets, fiz não! Foi mais tentando, usando e vendo o
> > que ele podia oferecer. E lógico que o bom e velho google.
>
> > 2009/6/19 Valdemar <valdemar.net...@gmail.com>
> >> > (http://faces.eti.br/2006/10/30/conhecimento-e-amadurecimento)-<http://faces.eti.br/2006/10/30/conhecimento-e-amadurecimento%29->Ocultar texto das mensagens anteriores -
>
> >> > - Mostrar texto das mensagens anteriores -
>
> > --
> > Flávio Castro
>
> --
> Rafaell Pinheiro Sousa- Ocultar texto das mensagens anteriores -

Tiago Augusto Nogueira Coelho

unread,
Jun 23, 2009, 7:08:47 AM6/23/09
to jav...@googlegroups.com
Se você puder usar o Seam existe uma forma muito simples de fazer isso. No pages.xml você usa a tag action e informa qual método do seu MB vai ser executado.
Reply all
Reply to author
Forward
0 new messages