Jóia Henrique?
eu testei aqui o que você me falou apareceu a seguinte mensagem:
java.lang.NullPointerException
at controller.ExtratoSecoController.calculaExtratoSeco(ExtratoSecoController.java:79)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.el.parser.AstValue.invoke(AstValue.java:172)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:77)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:91)
at javax.faces.component.UICommand.broadcast(UICommand.java:383)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:447)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:752)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
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:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
//Managed Bean - JSFpublicclassExtratoSecoControllerextendsAnaliseController{publicStringcalculaExtratoSeco(){try{this.extSec.setIdAnalise(super.getAnalise().getIdAnalise());this.extSec.setAmostra(super.getAmostra());...this.extSec.calculaExtratoSeco();}...}}publicclassAnaliseController{privateAmostraamostra=newAmostra();//A classe Análise é abstrata.protectedAnaliseanalise;//get's e set's ...}//No JSF:<h:commandButtonaction="#{ExtratoSecoController.calculaExtratoSeco}"value="Calcular"><f:setPropertyActionListenertarget="#{ExtratoSecoController.idAnalise}"value="#{Analise Controller.analise.idAnalise}"/><f:setPropertyActionListenertarget="#{ExtratoSecoController.amostra}"value="#{Analise Controller.amostra}"/></h:commandButton>
O que eu estou fazendo de errado Henrique?
Será que vc ou alguém pode me dar uma ajuda?
[]'s.
Jair_Rillo_Junior
No caso do JSF, você tem que instanciar o objeto. No seu caso seria algo assim
protected Analise analise = new Analise();
ricardocomp
Jóia Jair?
então só tem um probleminha a classe Análise é abstrata.
e agora o que eu faço?
Será que tem como vc Jair ou alguém me dar uma ajuda?
[]'s.
Jair_Rillo_Junior
Se ela é uma classe abstrata, então você tem que instanciar ela através de uma classe concreta que implemente a classe abstrata.
Dê uma forma ou outra você vai precisar de uma classe concreta, seja para instanciar ou no futuro você for usar injeção de dependência.
ricardocomp
Jóia Jair?
Eu estou usando herança?
por isso e tenho 12 classes filha de análise
no meu exemplo estou usando Extrato Seco que é
uma análise.
Eu não posso fazer isso pois eu não sei
qual análise vai ser pode ser qualquer uma das 12 análises
protected Analise analise = new ExtratoSeco();
Será que tem como vc Jair ou alguém me dar uma ajuda?
[]'s.
ricardocomp
Quem vai diferenciar é o tipo da Análise que eu não coloquei no exemplos.
[]'s.
Jair_Rillo_Junior
A primeira vista no seu caso eu daria 3 sugestões:
1 - Criar uma Factory para retornar a instancia correta da Analise. Por exemplo, alguma flag que vem da VIEW, informaria o tipo de Analise e assim a sua Factory retornaria a instancia correta. Estude esse padrão que creio que vá ficar mais claro (AbstractFactory, FactoryMethod ou então o SimpleFactory pode te ajudar)
2 - Faça a injeção de dependência da instancia correta. Isso pode ser um pouco mais complicado, caso você não use um framework que faça essa injeção (exemplo Spring).
3 - A mais fácil, que eu acredito, é definir quais os ManagedBeans e métodos de cada instancia. Assim quando um determinado managedBean/método for executado, ele criaria a instancia da Analise
Faça os testes ai e veja se consegue algo que resolva o seu problema
cristianopagani
Será que você não poderia aproveitar o polimorfismo nesse caso?
Lembre-se de que quando uma classe concreta estende uma classe abstrata, esta deverá implementar todos os métodos abstratos da superclasse, certo ?
Então qual implementação dos métodos será utilizada, vai depender do quê você está atribuindo na instância Analise, por exemplo:
Analise obj1 = new ExtratoSeco();
Analise obj2 = new QualquerOutraQueImplemente();
obj1 poderá acessar as implementações de ExtratoSeco e somente dele.