2012-05-05 7 views
1

У меня есть 2 страницы jsp. На первой странице jsp я использую combobox, который выбирает тему, несколько переключателей для действия. На сервлет этой странице я получаю request.getParameter("subjectID").Перезагрузка jsp и потерять request.getParameter ("...") на сервлет

Лучше Если я покажу сервлеты и 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> 

На этой странице я выбираю предмет из выпадающего списка. И выберите «Добавить тест». После того, как я иду в сервлет, где

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 я снова перехожу к тому же сервлету. Но я теряю значение request.getParameter («subject»).

Я пытаюсь использовать HttpSession, но на первой странице я отправляю карту. И получите с запросом только что выбрали subjectID с карты.

Я не знаю, как решить эту проблему. Thanks

+1

Просто добавьте еще одно скрытое поле с этим именем и стоимостью? – BalusC

+0

@BalusC на jsp с textField? как '' – Ray

+0

@BalusC Я не понимаю ... Можете ли вы мне помочь? – Ray

ответ

2

Вы можете сохранить параметры запроса для следующего запроса со скрытым полем. Параметры запроса доступны по карте ${param} в EL. Таким образом, это должно сделать:

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

Обратите внимание, что я использую JSTLfn:escapeXml(), чтобы избежать HTML сущности; это предотвратит возможный XSS attacks.

+0

WoW, хороший совет) Спасибо))) – Ray

+0

Добро пожаловать. – BalusC

+0

Hi @BalusC, спасибо. Интересно, почему это не работает (в диалоговом окне подтверждения не появляется запрос на сохранение параметров запроса_), когда endUser нажимает клавишу «Ввод» на URL-странице, чтобы перезагрузить страницу, вместо нажатия «F5» или кнопку «Обновить» навигатора ? – Omar

Смежные вопросы