2011-05-03 19 views
5

Hola, estoy tratando de leer los datos del formulario en un servlet enviado con el método de publicación. Y el servlet se llama como OnlineExam?q=saveQuestion. Ahora el servlet está trabajando como: formaleyendo los datos del formulario en servlet. datos publicados con el método de publicación y servlet llamado con? q = test1

public class OnlineExam extends HttpServlet { 
protected void doGet(HttpServletRequest request, 
      HttpServletResponse response) throws ServletException, IOException { 
if(request.getParameter("q").equals("saveQuestion")){ 
       /* 
       * Save the question provided with the form as well as save the uploaded file if any. 
       */ 
       saveQuestion(request); 
      } 
} 

protected void doPost(HttpServletRequest request, 
      HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 
//  doGet(request, response); 
     saveQuestion(request); 
    } 
public String saveQuestion(HttpServletRequest request){   
     System.out.println(request.getParameter("question")); 

     return ""; 

    }  
} 

HTML:

<form action="OnlineExam?q=saveQuestion" method="post"> 
     <fieldset> 
     <legend>Question</legend> 
     <textarea class="questionArea" id="question" name="question">Enter Question.</textarea> 
     <br class="clearFormatting"/>    
     <input class="optionsInput" value="optionA" name="optionA" onfocus = "clearValues('optionA')" onblur = "setValues('optionA')"/> 
     <br class="clearFormatting"/> 

     <input class="optionsInput" value="optionB" name="optionB" onfocus = "clearValues('optionB')" onblur = "setValues('optionB')"/> 
     <br class="clearFormatting"/> 

     <input class="optionsInput" value="optionC" name="optionC" onfocus = "clearValues('optionC')" onblur = "setValues('optionC')"/> 
     <br class="clearFormatting"/> 

     <input class="optionsInput" value="optionD" name="optionD" onfocus = "clearValues('optionD')" onblur = "setValues('optionD')"/> 
     <br/> 
     <input class="optionsInput" value="answer" name="answer" onfocus="clearValues('answer')" onblur="setValues('answer')"/>  
     <input type="submit" value="Save" /> 
     <input type="reset" value="Cancel" /> 
     <button style="display: none" onclick="return deleteQuestion()" >Delete</button> 
     </fieldset> 
     </form> 

Así que cualquier persona puede ilustrar cómo el servlet se llama en realidad. Me refiero a cuál es el flujo de control, es decir, cómo funcionan las cosas en este servlet.

Y cómo podría leer el parám1 allí en servlet.

ps: no quiero publicar el formulario con el método get.

+0

Hola a todos, necesito la forma de leer tanto obtener datos que es q = savequestion y publicar los datos de la forma. Entonces, ¿cómo leer los dos y analizarlos? – vinit

Respuesta

4

si envía datos a servlet. doPost serán invocados.

Dentro doPost() puede acceder a la solicitud parámetro como

request.getParameter("param1"); 
+1

Oye intenté esto pero muestra nulo – vinit

+0

elimina la llamada de doGET de doPost, es inútil –

+0

kk. pero luego cómo leer el valor de param1 – vinit

0

Vinit probar el código de abajo request.getParameter("param1");

+0

Hola, en realidad estoy intentando lo mismo que escribiste. eso fue solo un error de tipeo. ver la pregunta editada. Y gracias por la respuesta – vinit

+0

puede intentar eliminar? Q = saveQuestion # (solo una sugerencia no probada). En lugar de anexar en la acción del formulario, proporcione el argumento "q" como campo oculto en el formulario – gnanz

+0

No, no puedo tener realmente servlet haciendo otro trabajo dependiendo de los parámetros get – vinit

0

Al hacer clic en el botón "enviar" en su formulario, el método doPost de nuestro servlet será llamado - esto es dictado por el método que pones en el "formulario" en tu página HTML. Los parámetros de URL (q = saveQuestion) seguirán estando disponibles para su código en el método doPost. Parece tener la impresión de que los parámetros de URL serán procesados ​​por el método doGet y los parámetros de formulario por el método doPost. Ese no es el caso.

+0

Pero ¿por qué no puedo obtener los campos de formulario del formulario? Aunque se llama al servlet doPost. – vinit

+0

¿Estás seguro de que se está llamando al método doPost? ¿Has probado Enumeration paramNames = request.getParameterNames(); while (paramNames.hasMoreElements()) { System.out.println ((String) paramNames.nextElement()); } para ver qué parámetros están llegando al servlet? – DaveH

5

Debe obtener el valor de q en su doPost no en su doGet. Como usa method="post", en el servlet el doPost es el que no llamó al doGet. Retire el código en su doGet y luego insértelo en doPost. Y usted doPost debe ser algo como el siguiente código.

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    if(request.getParameter("q").equals("saveQuestion")){ 
     saveQuestion(request); 
    } 
} 
2

¿Esto está resuelto?

Me enfrenta el mismo problema. me trataron

Enumeration paramNames = request.getParameterNames(); while(paramNames.hasMoreElements()) { System.out.println((String)paramNames.nextElement()); } 

y se está mostrando 0 elementos, por lo que los datos del formulario no está siendo leído por el servlet.

Recibí la respuesta en otro hilo. enctype=multipart/form-data estaba causando esto. Después de eliminarlo de la forma, fue capaz de leer datos.

0
doPost() { 
    processRequest(request, response); 
    //to do 
} 

Eliminar/comentar processRequest(request, response) y pruébalo nuevamente. Ahora no deberías obtener valores nulos.

+0

@jvperrin, el inglés no es mi lengua materna. Muy muy decepcionado con su voto a la baja. –

+0

No te voté, solo edité tu publicación para que sea más legible. – jvperrin

1

Sé que este es un hilo antiguo pero no pude encontrar una respuesta cuando busqué, así que estoy publicando mi solución para alguien que puede tener el mismo problema al obtener nulo de los parámetros del formulario en la función dopost de su servlet.

Tuve un problema similar al obtener valores nulos al usar la solicitud.getParameters ("param1"); funciones. Después de horas jugando con él, me di cuenta de que el parámetro que estaba usando era el ID de la etiqueta de entrada que estaba solicitando. Eso estuvo mal. Tuve que usar el atributo NAME de la etiqueta de entrada para obtener el valor correcto del cuadro de entrada. Eso fue todo lo que fue. Solo tuve que agregar un nombre y obtener el parámetro con este nombre y eso solucionó el problema.

Espero que esto ayude a alguien.

Cuestiones relacionadas