2012-11-22 190 views
0

正確捕獲如果我任意分配在執行servlet的工作原理的「id」值;但是,如果我沒有正確地從抽象類繼承id值並且跳過'if'語句轉發到'then'語句中提供的url。是什麼賦予了?能告訴什麼是錯的 '身份證' 變量:ID似乎並沒有被在servlet的

摘要的servlet snipet:

protected Integer id = null; 

private void _doProcess(final HttpServletRequest request, final HttpServletResponse response) 
     throws IOException, ServletException { 
    try { 
     response.setContentType("text/html"); 
     writer = response.getWriter(); 
     final String idString = request.getParameter("id"); 
     if(StringUtil.isNotEmptyStringTrimmed(idString)){ 
      try { 
       id = Integer.parseInt(idString.trim()); 
      } catch (NumberFormatException e) { 
       id = null; 
      } 
     } 

     doProcess(request,response); 

    } finally { 
     id = null; 
    } 

    try { 
     writer.close(); 
    } catch (Exception e) { 
     // no-op 
    } 
} 

實施的servlet snipet:

public void doProcess(final HttpServletRequest request, final HttpServletResponse response) 
     throws IOException, ServletException { 

    // set page title 
    final HttpSession session = request.getSession(); 
    session.setAttribute("pageTitle", "Training Project 5: Author"); 

    if (id == null){ 
     request.setAttribute("authorNamesList", printAuthorNames()); 
     request.getRequestDispatcher("authorList.jsp").include(request,response); 
    }else{ 
     final Author author = BEAN_FACTORY.getMember(id); 
     session.setAttribute("authorId",author.getId()); 
     session.setAttribute("name", author.getName()); 
     session.setAttribute("bio", author.getBio()); 
     session.setAttribute("picture",author.getPicture()); 
     session.setAttribute("bookTitles", printBookTitles(author.getId())); 
     request.getRequestDispatcher("authorPage.jsp").include(request,response); 
    } 
} 

下面的JSP代碼工作時進行如上的servlet '其他'代碼不在條件語句中:

<div id="right"> 
    <table class="display" summary="Author Information">   
    <tr> 
     <td><span class="brown">Author Id: <c:out value="${authorId}"/></span></td> 
    </tr> 
    <tr> 
     <td><span class="brown">Name: <c:out value="${name}"/></span></td> 
    </tr> 
    <tr> 
     <td><span class="brown">Bio: <c:out value="${bio}"/></span></td> 
    </tr> 
    <tr> 
     <td> 
      <p> 
       <span class="brown"><img src="<c:out value="${picture}"/>" alt= ""/></span> 
      </p> 
     </td> 
    </tr> 
+0

什麼是'id'變量?它在哪裏定義?它在哪裏獲得價值? – Isaac

+0

是否爲ID未定義?它是否初始化? – Rayshawn

+0

id變量在此servlet擴展的抽象類中定義: – Mike

回答

3

除非id是一個一流的領域,你沒有向我們展示所有的代碼。也不清楚你的意思是「它不工作」。預期的內容是空的?你會得到一個異常?

+0

我沒有得到一個異常,它只是不會填充到會話中。爲了檢查,我打印出所有的會話變量,但沒有任何內容。但是,如果我更改'id'的值並將'else'塊的內容從if/then語句中取出,它將在我的jsp頁面中打印出來。 – Mike

+0

看起來這可能是一個問題與編號。 。 。我剛剛將if/then語句完整地保留下來,並輸入:id = 2並打印出來。它的奇怪之處在於,沒有覆蓋退出的id值,程序流知道跳過if語句並轉到else .jsp重定向。瘋。 – Mike

+0

感謝您的幫助:) – Mike

1

「ID」會一直爲空或未定義,而如果它未初始化。

+0

感謝您的幫助:) – Mike

0

想出什麼問題了。 。 。抱歉的傢伙(和加爾斯)我沒有給每個人足夠的信息來解決問題。有一個authorList.jsp頁面打印每個人都可以選擇的列表(見下文)。用戶在authorList.jsp頁面中選擇想要查看信息的作者,然後將作者ID參數轉發回servlet,該servlet將用戶轉發給顯示個人作者信息的authorPage.jsp。

基本上,我曾使用下列jsp頁面(authorPage.jsp),而不是對在web.xml(listAuthor)小服務程序映射指定的確切的.jsp名稱。我:

<table summary="Author List"> 
     <c:forEach items="${authorNamesList}" var="name"> 
      <tr> 
       <td><span class="brown"><a href="authorPage.jsp?id=${name.key}">${name.value}</a></span></td> 
      </tr> 
     </c:forEach> 

本來應該是:

<table summary="Author List"> 
     <c:forEach items="${authorNamesList}" var="name"> 
      <tr> 
       <td><span class="brown"><a href="listAuthor?id=${name.key}">${name.value}</a></span></td> 
      </tr> 
     </c:forEach> 
    </table> 

有些時候,最好是剛剛離開,稍後再回來看看新鮮!感恩節快樂大家:)