2016-08-29 2 views
2

В JSP, которые я написал следующий код:request.getAttribute возвращение нуль в сервлет

<form action="./ssoServlet?from=amount" method="post"> 
    <%request.setAttribute("formName", "DayCareForm"); %> 
    Amount 
    <input type="text" name="amount" id="amount" required > 
    <button onclick="dayCarePdf()" type="submit"> Convert to PDF </button> 
    </form> 

Сообщение метод сервлета:

@Override 
    public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
     System.out.println("DoPost method"); 
     resp.setContentType("text/html"); 

     if(req.getParameter("from").equals("amount")) 
     { 
      req.getParameter("amount"); 

      String form = (String) req.getAttribute("formName"); 
      System.out.println("Type of form " +req.getAttribute("formName")); 
      RequestDispatcher dispature = getServletContext().getRequestDispatcher("/DayCare.jsp"); 
      dispature.forward(req, resp); 
     } 
} 

Однако сервлет возвращает нулевое значение для типа формы

+0

Как вы представляете форму? –

+0

У меня есть кнопка внутри формы

+0

i can not см. Любую кнопку отправки там –

ответ

0

Попробуйте ниже код:

<form action="./ssoServlet" method="post" id="myForm" name="DayCareForm"> 
Amount 
<input type="text" name="amount" id="amount" required > 
<input type="hidden" name="formName" value="DayCareForm" /> 
<button onclick="dayCarePdf()" type="submit"> Convert to PDF </button> 
</form> 

JavaScript:

function dayCarePdf() 
{ 
    document.getElementById("myForm").submit(); 

//Rest Code will come here 


} 

установить скрытое поле как имя формы, и вы можете получить доступ к имени формы с помощью кода ниже.

String formName= request.getParameter ("formName"); // you will get DayCareForm as we set form name 
+0

Submit - это кнопка, а не текстовое поле –

+0

, но в вашем коде я могу видеть только текстовое поле, а не кнопку, попробуйте мой код –

+0

Я хочу «formName» "в сервлет, а не javascript –

0

В jsp Вы устанавливаете значение в запросе. Таким образом, он работает только для жизни запроса.

Сервлет вызывается перед тем, как перейти к jsp. Поэтому, когда атрибут извлекается из запроса в сервлете, он еще не существует.

Поместите его в сеанс, и он работает.


Когда вы достигнете линии:

String form = (String) request.getAttribute("formName"); 

код

req.setAttribute("formName", something) 

не был установлен для текущего запроса.

Код

<%request.setAttribute("formName", "DayCareForm"); %> 

выполняется на предыдущего запроса. Каждый раз, когда вы переходите к сервлету, атрибуты запроса сбрасываются.

Но вы можете установить атрибут и получить атрибут из сеанса. В этом случае он работает, потому что сеанс заканчивается, когда браузер закрыт или сеанс недействителен.


Для работы с сессией, вместо запроса заменить

<%request.setAttribute("formName", "DayCareForm"); %> 

с

<%session.setAttribute("formName", "DayCareForm"); %> 

и

String form = (String) request.getAttribute("formName"); 

с

String form = (String) request.getSession().getAttribute("formName"); 
+0

Я запутался .. –

+0

Не могли бы вы поддержать ваш ответ кодом –

+0

Я понял проблему сейчас. Итак, теперь я должен добавить session.getAttribute ("formName")? –

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