2016-03-28 23 views
-1

JSP sayfasında kazanılan bir değişken değerini bir servlet sayfasına geçiriyorum. Seansları kullandım. Ama aşağıdaki NullPointerException verir.Bir JSP'den Servlet'e bir değişken değeri geçirme

java.lang.NullPointerException 
    com.google.api.client.http.GenericUrl.appendParam(GenericUrl.java:599) 
    com.google.api.client.http.GenericUrl.addQueryParams(GenericUrl.java:582) 
    com.google.api.client.http.UriTemplate.expand(UriTemplate.java:346) 
    com.google.api.client.http.UriTemplate.expand(UriTemplate.java:259) 
    com.google.api.client.googleapis.services.AbstractGoogleClientRequest.buildHttpRequestUrl(AbstractGoogleClientRequest.java:266) 
    com.google.api.client.googleapis.services.AbstractGoogleClientRequest.buildHttpRequest(AbstractGoogleClientRequest.java:301) 
    com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419) 
    com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352) 
    com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469) 
    com.translator.api.TranslatorApi.getTranslate(TranslatorApi.java:66) 
    control.TextTranslation.doPost(TextTranslation.java:47) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:650) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

imageExtract.jsp

</div> 
     <div class="row"> 
      <div id = "display" class="col-lg-8 center-block "> 
      <% 
      String extracted = (String) request.getAttribute("extractedText"); 
      session.setAttribute("text", extracted); 

      %> 
       <textarea maxlength="200" class=" form-control " name="msg" rows="20" id="Extract-textarea" ><%=extracted %> </textarea> 

      </div> 
    </div> 

TextTranslate.java

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

    PrintWriter out = response.getWriter(); 
    String language = "ES"; 
    HttpSession extractedText = request.getSession(); 
    String imageName = (String) extractedText.getAttribute("extractedText"); 
    System.out.println("this is so stupid"); 
    System.out.println("This is "+imageName); 
    TranslatorApi translation = new TranslatorApi(); 

    String outputText = translation.getTranslate(imageName, language); 
    System.out.println("Second"+outputText); 
    request.setAttribute("outputText", outputText); 
    RequestDispatcher sndValue = request.getRequestDispatcher("/translation.jsp"); 
    sndValue.forward(request, response); 

} 

sorun oturumu değeri NullpointerException verir servlet, geçirilen olmamasıdır. Bu neden olabilir?

+0

Hangi değerdir? "text" veya "extractedText"? – brso05

+0

Lütfen JSP içerisinde düz java kullanmaktan kaçının. JSTL, içinde Java'yı değiştirmek için iyi bir iş çıkarır. –

+0

"text" adlı bir session niteliği ayarlıyorsunuz ve * extractedText 'adlı bir session niteliğine * sahip oluyorsunuz. Bu yüzden "null". –

cevap

2

Ayarlanan oturum değişkeninin adı sadece "metin" dir, ancak kodunuzdaki "extractedText" özniteliğine erişmeye çalışıyorsunuz. Sadece "metin" özelliğine erişilemiyor, sadece ayarlanmış.

Yukarıdaki kodunuzda, ayıklanmış Metin özniteliğini oturumunuzda ayarlayan hiçbir şey yok gibi görünüyor. Dolayısıyla, tabiki başarısız olan imageName değişkeni ile Google API'nize sıfırdan sıfırlanır.

0

Yalnızca ayarladığınız Öznitelik değerlerini alabilirsiniz, bu özellik değerini elde etmeniz için bir çıkış özniteliği belirlediniz.

request.setAttribute("outputText", outputText); 

Eğer JSTL kullanarak kodunuzu görebilirsiniz .. JSTL standarttır ve html kodunu temizlemeye yardımcı kullanma getAttribute

<div class="row"> 
     <div id = "display" class="col-lg-8 center-block "> 
     <% 
     String extracted = (String) request.getAttribute("outputText"); 
     session.setAttribute("text", extracted); 

     %> 
      <textarea maxlength="200" class=" form-control " name="msg" rows="20" id="Extract-textarea" ><%=extracted %> </textarea> 

     </div> 
</div> 

düzeltmek için kodunuzu değiştirin

bunu ne kadar basit jstl kullanıyor. Sorun

<div class="row"> 
     <div id = "display" class="col-lg-8 center-block "> 
      <textarea maxlength="200" class=" form-control " name="msg" rows="20" id="Extract-textarea" > 
      <c:out value="${outputText}"> 
      </textarea> 
     </div> 
    </div> 

Simple tutorial for using and setting up jstl

İlgili konular