2016-03-28 25 views
-1

JSPページで得られた変数値をサーブレットページに渡しています。私はセッションを使いました。しかし、それは次のようになりますNullPointerExceptionJSPからサーブレットに変数値を渡す

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); 

} 

問題は、セッション値がNullpointerException与えサーブレットに渡されていないことです。なぜこれが起こっているのでしょうか?

+0

? 'text'か' extractedText'ですか? – brso05

+0

JSP内でplain javaを使用しないでください。 JSTLは、Javaの代わりにJSTLを使用しています。 –

+0

'text'というセッション属性を設定し、' extractedText'という名前のセッション属性を取得しています。だから、それは 'ヌル'だ。 –

答えて

2

設定されているセッション変数の名前は単なる「テキスト」ですが、コード内の「extractedText」属性にアクセスしようとしています。 "text"属性はアクセスされておらず、単に設定されています。

上記のコードでは、セッションでextractedText属性を設定するものは何もないようです。したがって、nullをGoogle APIに返すだけです。imageName変数を使用すると、当然失敗します。

0

設定した属性値のみを取得できます。属性値を取得する必要があるように、outputTextの属性を設定しています。

request.setAttribute("outputText", outputText); 

あなたはJSTLを使用してコードを見ることができるように... JSTLが標準であり、あなたのHTMLコードをクリーンアップするのに役立ちます使用の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> 

を修正するようにコードを変更し

それをどのくらいに簡単jstlを使用しています。問題となる値

<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