2012-05-05 40 views
1

我有2個jsp頁面。在第一個jsp頁面中,我使用組合框選擇主題,多個單選按鈕進行操作。在servlet這個頁面上,我得到了request.getParameter("subjectID")重新加載jsp並在servlet上丟失request.getParameter(「...」)

更好

如果我告訴servlet和JSP

<form action="/TutorWebApp/controller" method="POST" name="editTestForm"> 
       <p> 
        Choose subject 
        <select name='subject'> 
         <c:forEach items="${subjects}" var="subject" >     
          <option value="${subject.key}"> 
           ${subject.value.getName()} 
          </option>      
         </c:forEach> 
        </select> 
       </p>     
       <input type="radio" name="command" value="add_test"> 
       Add test <br /> 
       <input type="radio" name="command" value="add_subject"> 
       Add subject <br />     
       <input type="submit" value="OK"/>     
      </form> 

在這個頁面中,我選擇從組合框主題。並選擇「添加測試」。之後,我去的servlet,其中

class AddTestCommand implements Command { 

    private static final String PARAM_TEST_NAME = "testName"; 
    private static final String PARAM_SUBJECT = "subject"; 

    @Override 
    public String execute(HttpServletRequest request) throws ServletException, IOException { 
     String page = " "; 
     String message = " ";   

     String testName = request.getParameter(PARAM_TEST_NAME); 


     if (testName != null && (!"".equals(testName))) { 

      HttpSession session = request.getSession(true); 
      Integer userID = (Integer) session.getAttribute("userID"); 


      Integer subjectId = 
        Integer.valueOf(request.getParameter(PARAM_SUBJECT)); 

      if(AddTestLogic.addTest(userID, subjectId, testName)){ 
       message = "Success"; 
      } else{ 
       message = "This test already exist"; 
      }   

      request.setAttribute("result", message); 
     }  


     page = ResourceBuilder.getPropertyManager(PropertyEnum.JSP_PAGE). 
       getProperty("path.page.addtest"); 
     return page; 
    } 
} 

在那裏,我可以得到主體的價值request.getParameter("subject");附近與測試名之前,如果(){}一步和下一步 - 進入下一JSP

<form action="/TutorWebApp/controller" method="POST" name="addTestForm"> 
      <input type="hidden" name="command" value="add_test" />    
      Name of new test: 
      <input type="text" name="testName" value=""/>    
      <input type="submit" value="Add test"/>    
</form> 

後的輸入數據在jsp中,我再次轉到同一個servlet。但我失去了價值request.getParameter(「subject」)。

我嘗試使用HttpSession,但在第一頁上發送Map。並且請求獲取只需從Map中選擇subjectID。

我不知道如何解決這個問題。 謝謝

+1

只需添加具有該名稱和值的另一個隱藏字段? – BalusC

+0

jsp上的@BalusC與textField?作爲'' – Ray

+0

@BalusC我不會理解......你能幫我嗎? – Ray

回答

2

您可以保留具有隱藏字段的下一個請求的請求參數。請求參數可通過EL中的${param}地圖獲取。所以,這應該這樣做:

<input type="hidden" name="subject" value="${fn:escapeXml(param.subject)}" /> 

請注意,我使用JSTLfn:escapeXml()逃脫HTML實體;這將防止可能的XSS attacks

+0

魔獸世界,很好的建議)謝謝))) – Ray

+0

不客氣。 – BalusC

+0

嗨@BalusC,謝謝。當最終用戶在URL上點擊「Enter」鍵以重新加載頁面而不是按下「F5」或單擊「刷新」導航器的按鈕時,我不知道爲什麼這不起作用(_確認對話框沒有被提示保留請求參數_) ? – Omar