2011-01-30 18 views
8

Próbuję użyć getServletContext() getRealPath ("/"), ale wciąż otrzymuję ten błąd.Dlaczego getservletcontext nie został znaleziony?

nie może odnaleźć symbol symbol: metoda getServletContext() lokalizacja: Interfejs javax. servlet.http.HttpSession Ścieżka ciągu = session.getServletContext(). getRealPath ("/") + "layout/tiles /" + reportPath; enter image description here

public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { 

     session = request.getSession(); 
     Map params = new HashMap(); 
     String reportPath = "maintenance/jasper/report01.jasper"; 
     exportToPDF(reportPath , response, params); 

     return null; 
    } 

    protected void exportToPDF(String reportPath , HttpServletResponse response, Map jasperParams) throws Exception { 

      String path = session.getServletContext().getRealPath("/") + "layout/tiles/" + reportPath ; 

      if (!new File(path).exists()) { 
       throw new Exception("The path doesn''t exist. </br>" + path); 
      } 
      InputStream input = new FileInputStream(path); 

      jasperParams.put("REPORT_LOCALE", Locale.US); 

      JasperPrint jasper = JasperFillManager.fillReport(input , jasperParams, new JRBeanCollectionDataSource(Vehicles)); 

      response.setContentType("application/pdf"); 
      ServletOutputStream output = response.getOutputStream(); 

      JRExporter exporter = new JRPdfExporter(); 

      exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasper); 
      exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, output); 

      exporter.exportReport(); 
      output.close(); 


    } 

Jeżeli masz jakiś pomysł dlaczego tak się dzieje?

Dzięki Ritesh, robiłem, co mi powiedział, ale teraz mam nową wiadomość

enter image description here

------ EDIT --------

sprawdzanie mój dispatcher-servlet.xml Zauważyłem, że trochę różni się od kodu pokazanego na tym web. Nie wiem, jak to wpłynęłoby na mój projekt, ale to, co robię, lubię wiedzieć, czy istnieje inne podejście do uzyskania tego samego wyniku co sesja. getServletContext() .getRealPath ("/")

<bean id="viewResolver" 
     class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
    <property name="viewClass" 
       value="org.springframework.web.servlet.view.tiles2.TilesView" /> 
</bean> 
<bean id="tilesConfigurer" 
     class="org.springframework.web.servlet.view.tiles2.TilesConfigurer"> 
    <property name="definitions"> 
     <list> 
      <value>/WEB-INF/tiles.xml</value> 
     </list> 
    </property> 
</bean> 
+0

Czy możesz sprawdzić ten dokument http: // netbeans.org/kb/68/web/quickstart-webapps-spring.html i czy w konfiguracji projektu jest coś innego? – Ritesh

+0

Którą wersję raportów Jasper używasz i jakie słoiki z raportów Jasper dodałeś do swojego projektu? – Ritesh

+0

@ Ritesh-JasperReports 3.7.1 i ... to jest dość kłopotliwe, ponieważ nie wiedziałem, które słoiki dodać, dodałem wszystkie słoiki zawarte w folderach "lib" i "dist", które pochodzą z jasperreports- 3.7.1-project.zip. – eddy

Odpowiedz

4

getServletContext() dodano serwletu 2.3. Nie było go w 2.2, zobacz Servlet 2.2 javadoc

Tak więc jedynym wyjaśnieniem jest to, że twój projekt sprawdza poprawność kodu względem starej wersji.

getServletContext() jest tam również w klasie kontrolerów Springa, której używasz. Więc zamiast session.getServletContext().getRealPath("/"), będzie dobrze z tylko getServletContext().getRealPath("/")

Edited 30 stycznia: Jasper Reports pliki jar oczyszczania

I sprawdzeniu, że jasperreports-3.7.1-project.zip ma starą wersję serwletu. słoik. Polecam następujące:

  1. Usuń wszystkie pliki jar, które zostały dodane od lib folderu jasperreports-3.7.1-project.zip ale zachować pliki jar z folderu „dist”.

  2. Dodaj plik JAR jeden po drugim na podstawie komunikatów o błędach kompilacji. Nie dodawaj żadnego pliku JAR, który jest również dostępny w folderze TOMCAT-HOME/lib i nie dodawaj żadnego pliku jar sprężyny. Ponieważ wiesz, że raport Jaspera zawiera stare pliki JAR, najpierw sprawdź, czy netbeans dostarcza te słoiki. Jeśli nie, spróbuj z najnowszymi wersjami z innych repozytoriów, takich jak http://repo1.maven.org/maven2/. Wiosenne pobieranie frameworku z zależnościami ma również kilka typowych plików, z których można korzystać.

  3. Sprawdź dowolny zasób online, aby uzyskać więcej informacji o wymaganych plikach jar. Poniższy link opisuje integrację z raportami Jaspera w wersji 1.2.5 w netbeans: http://developers.sun.com/jsenterprise/archive/reference/techart/jse8/jasper_reports.html Ale potrzebujesz czegoś podobnego do wersji 3.7.1.

+0

* "sprawdzanie poprawności kodu względem ..." * - bardziej prawdopodobne jest, że * kompiluje * ze starszą wersją interfejsów API. –

+0

Przepraszam, jestem nowy w java. Czy możesz mi powiedzieć, jak mogę zmienić wersję? gdzie mogę znaleźć ten słoik? – eddy

+0

Z pytania (i zrzutu ekranu) nie jest jasne, czy jest to błąd kompilacji. Nie ma informacji o tym, jak projekt jest budowany. Jeśli korzystasz z Eclipse IDE, kliknij prawym przyciskiem myszy nazwę projektu, kliknij właściwości, wybierz "Facet projektu" i zmień wersję "Dynamic Web Module". To naprawi błąd sprawdzania poprawności w IDE. – Ritesh

Powiązane problemy