Olá boa tarde,
realizo em minha aplicação uma passagem de parametro e os capturo dessa forma:
<f:view>
<f:metadata>
<f:viewParam name="id" value="#{meuBean.id}" />
</f:metadata>
</f:view>
Gostaria que depois de receber esse parametro, um método fosse imediatamente chamado. Existe algum modo de fazer isso?
Abraços.
OBS: Estou utilizando primefaces 3.
tenta fazer assim
[code]public construtorDaClasse(){
HttpServletRequest request = (HttpServletRequest) FacesContext
.getCurrentInstance().getExternalContext().getRequest();
if(!request.getParameter("PARAMETRO").isEmpty()){
seuMetodo();
}
}
[/code]
Não deu certo. Por hora, coloquei a chamada ao método dentro do set do ID. Funciona, mas eu creio que isso pode gerar problemas futuros, principalmente de desempenho se o ID for reutilizado para outro fim.
INFO: Exception when handling error trying to reset the response.
com.sun.faces.mgbean.ManagedBeanCreationException: Não é possível criar instância para·a classe: consultas.meuBean.
at com.sun.faces.mgbean.BeanBuilder.newBeanInstance(BeanBuilder.java:193)
at com.sun.faces.mgbean.BeanBuilder.build(BeanBuilder.java:102)
at com.sun.faces.mgbean.BeanManager.createAndPush(BeanManager.java:409)
at com.sun.faces.mgbean.BeanManager.create(BeanManager.java:269)
at com.sun.faces.el.ManagedBeanELResolver.resolveBean(ManagedBeanELResolver.java:244)
at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:116)
at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
at com.sun.el.parser.AstIdentifier.getValue(AstIdentifier.java:103)
at com.sun.el.parser.AstValue.getValue(AstValue.java:179)
at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:224)
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
at javax.faces.component.UIComponentBase.isRendered(UIComponentBase.java:413)
at org.primefaces.component.menu.BaseMenuRenderer.encodeTieredMenuContent(BaseMenuRenderer.java:119)
at org.primefaces.component.menu.BaseMenuRenderer.encodeTieredSubmenu(BaseMenuRenderer.java:184)
at org.primefaces.component.menu.BaseMenuRenderer.encodeTieredMenuContent(BaseMenuRenderer.java:141)
at org.primefaces.component.menubar.MenubarRenderer.encodeMarkup(MenubarRenderer.java:63)
at org.primefaces.component.menu.BaseMenuRenderer.encodeEnd(BaseMenuRenderer.java:40)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1764)
at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1757)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:402)
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
at java.lang.Thread.run(Thread.java:679)
Caused by: java.lang.NullPointerException
public meuBean() {
FacesContext contexto = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest) contexto.getExternalContext().getRequest();
id = Integer.valueOf(request.getParameter("id").toString());
if (id>0) {
teste();
}
}
public final void teste() {
System.out.println("Entrei...");
}
Abraços.
crisirado
Coloca a class bean ai… para facilitar
abras
Uma dúvida, porque vc precisa chamar o método atráves de parâmetros via url?
Qual tipo de situação vc utiliza isto?
Olá MarcoQuadros030810, o bean não tem muito segredo, mas hoje está bem grande, então vou tentar resumir o Bean.
@ManagedBean(name = "HistoricoPessoasBean")
@ViewScoped
public class HistoricoPessoasBean {
private LazyDataModel<HistoricoPessoasView> historicoPessoas;
private Integer id;
@EJB
private HistoricoPessoasFacadeLocal HistoricoPessoasDAO;
public HistoricoPessoasBean() {
}
@PostConstruct
void init() {
if (id > 0) {
visualizarHistorico();
}else{
buscarhistoricoPessoas();
}
}
public void buscarhistoricoPessoas() {
//Gera lista de pessoas
}
public void visualizarHistorico() {
//busca todos os dados a partir do id recebido
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
init();
}
}
Respondendo o questionamento do rafaduka. Tenho uma lista de pessoas e é possível você escolher uma pessoa da lista para ver o histórico de informações dela. Eu preciso do id dessa pessoa e quando passar para a página de visualização de histórico(outro .xhtml) trazer parte desses dados carregados, mas antes preciso realizar uma busca por esse dados. Digo parte, porque a visualização tem alguns botões que abrem alguns <p:dialog>.
Sim, eu uso o mesmo bean para isso, se por ventura houver esse questionamento. Por hora eu estou chamando no método set o método init(), mas me incomoda isso porque setters e getters pelo menos no que me passaram não pode ter chamada de funções ou outros tipos de código. Funciona, mas acho que não é o ideal.
Abraços.
Com JSF, você consegue chamar o método direto no link.
Exemplo:[code]<p:dataTable value="#{historicoPessoasBean.listaPessoas}" var=“var”>
<p:column>
#{var.idPessoa}
</p:column>
<p:column>
#{var.nomePessoa}
</p:column>
<p:column>
//link para chamar seu método, sem necessidade de chamar na URL.
<p:commandLink action="#{historicoPessoasBean.visualizarHistorico(var.idPessoa)}" />
</p:column>
</p:dataTable>[/code]Aqui 4 maneiras de passar o atributo com JSF
rafaduka,
nesse caso e nos demais exemplos todos trabalham com @SessionScoped, então os dados se mantem mesmo mudando de página. No meu caso estou usando @ViewScoped, por isso eu passo um id por URL e tento buscar todos os dados .
Mesmo assim, valeu rafaduka.
Abraços.
crisirado, é claro que perde o id, vc está navegando “orientado à páginas” com ViewScope.
(infelizmente isso é um vício dos desenvolvedores quando se trabalha com JSF)
“Navegue entre views orientada à estados e não à páginas”, vc insere a inteligência e controle nos managed beans. mais informações.
Assim continua trabalhando com ViewScope sem perder seus dados.