Boa tarde comunidade, venho pedir ajuda a vocês…
Seguinte, estou desenvolvendo uma aplicação a na exclusão eu gostaria de pedir a confirmação do usuário. Se eu coloco direto na action do botão ele funciona perfeitamente, porém, se do botão eu chamo uma p:confirmDialog, ele perde o objeto e tenho assim um nullpointer!
Código do meu xhtml onde está o botão de exclusão e o dialog
O confirmDialog deve estar dentro de um form. Caso crie outro form para ele, o botão que chama-lo tem que ter update=":outroForm"
sandro.rizzo
Tirei ele do form e coloquei em outro form, mudei o botao de H:COMANDBUTTON para P:COMANDBUTTON ai coloquei o update=":outroform:iddialog" e mesmo assim nao funcionou!
Alguma outra sugestao?
ErickRAR
Tente com um propertyActionListener dentro do seu p:commandButton:
Ps: Se estiver usando primefaces 4.0, o confirmDiaglo mudou, agora é só colocar essa linha dentro de um commandButton. Tem que colocar o setPropertyActionListener também, ficaria algo tipo:
Meu codigo ficou assim, porem, ao abrir o confirmDialog, quando eu clico no botao de "Sim" ele nem vai ao meu metodo de exclusao e da um nullpointer antes disso;
java.lang.NullPointerException
at com.sun.faces.context.PartialViewContextImpl.createPartialResponseWriter(PartialViewContextImpl.java:485)
at com.sun.faces.context.PartialViewContextImpl.access$300(PartialViewContextImpl.java:73)
at com.sun.faces.context.PartialViewContextImpl$DelayedInitPartialResponseWriter.getWrapped(PartialViewContextImpl.java:619)
at javax.faces.context.PartialResponseWriter.startDocument(PartialResponseWriter.java:116)
at org.primefaces.context.PrimePartialResponseWriter.startDocument(PrimePartialResponseWriter.java:205)
at com.sun.faces.context.AjaxExceptionHandlerImpl.handlePartialResponseError(AjaxExceptionHandlerImpl.java:201)
at com.sun.faces.context.AjaxExceptionHandlerImpl.handle(AjaxExceptionHandlerImpl.java:126)
at javax.faces.context.ExceptionHandlerWrapper.handle(ExceptionHandlerWrapper.java:100)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:119)
at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:121)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Alguem tem noção do que possa ser?
Roselito_Favero_da_S
Ali em cima você disse que o managedbean está com as anotações @Sessionscoped e @Requestscoped…
Tem que ter só uma… tente deixar somente @Sessionscoped
sandro.rizzo
Roselito, já tentei tirar o @RequestScope, porém mesmo assim não funcionou!!
Roselito_Favero_da_S
Você está com forms aninhados. Isso não funciona de jeito nenhum. Eu tive problemas com o confirmDialog semana passada. Resolvi assim:
<p:confirmDialogwidgetVar="cdPatrimonios"showEffect="fade"header="Atenção:"message="Confirma geração de patrimônios?"hideEffect="explode"><p:commandButtonvalue="Sim"styleClass="ui-confirmdialog-yes"icon="ui-icon-check"oncomplete="cdPatrimonio.hide()"actionListener="#{fileUploadController.patrimonios()}"/><p:commandButtonvalue="Não"styleClass="ui-confirmdialog-no"icon="ui-icon-close"onclick="cdPatrimonio.hide()"/></p:confirmDialog>
O método patrimonios() tem essa assinatura:
No meu caso, o confirmDialog está dentro do mesmo form de um dataTable.
sandro.rizzo
Gostaria de agradecer a todos que me ajudaram, consegui resolver o meu problema… Talvez nem seja do jeito mais “certo”, mas funcionou e é o que importa rsrs…
Abaixo o código como ficou!
public void excluirArquivo(ActionEvent actionEvent) {
arquivosBO.excluirArquivo(excluirArquivoSelecionado );
pesquisarArquivos();
limparCampos();
}
public void setaObjetoParaExcluir() {
excluirArquivoSelecionado = arquivoSelecionado;
}
E também retirei o @RequestScoped!
Mais uma vez, obrigado a todos que me ajudaram!
asousaj
Que bom que conseguiu.
Só para informação. Quando não se seta o escopo de um managedbean, por default fica @RequestScoped.
Para melhor legibilidade do código, mesmo que não necessário, é recomendável a inserção do @RequestScoped.