# request.getParameter("name") von Formular auf JSP-Seite leer



## programmiererin (14. Aug 2009)

Hallo,

ich arbeite an einer web-anwendung, die Nutzereingaben in eine Datenbank speichert. Ich arbeite mit der Model-View-Controller-Architektur.

Hier ist der Ablauf der internen file-Aufrufe:
html-seite mit formular zum login
-> javaservlet (controller1), das login testet und daten aus der datenbank holt, die für im nächsten formular dargestellt werden (daten werden mithilfe einer anderen java-klasse(model) geholt)
->jsp-seite, die geholte Informationen in einem formular darstellt
-> javaservlet (controller2), das formulardaten auswerten soll

Das zweite Formular wird also dynamisch erstellt, z.B. wird der Inhalt von <select>-Scrollboxen mit Inhalt der Datenbank gefüllt.

Mein Problem ist, dass im javaservlet (controller2)die Methode request.getParameter("elementName") null und nicht den Wert des input-text elements mit dem namen "elementName" zurücktgibt.

Hat jemand eine Idee, woran das liegen könnte? Warum werden die Werte nicht im request gespeichert? request ist übrigens nicht null und enthält auch header-Informationen.

Über Hilfe würde ich mich sehr freuen


----------



## programmiererin (14. Aug 2009)

also ich denke, ich habe alles ausprobiert und das problem muss in dem request-objekt liegen...
dem request werden beim ausfüllen des formulars überhaupt keine parameter zugewiesen.
es muss sich um ein neues request-objekt handeln, als das was vom ersten formular erzeugt wurde.
anscheinend ist es ein problem für eine jsp-seite, die schon einen request erhalten hat, einen (anderen oder meinetwegen auch den gleichen) request "abzusenden".
ich verstehe nicht warum.

hat denn niemand eine idee??
???:L


----------



## HLX (14. Aug 2009)

Source-Code von Servlet und JSP?


----------



## programmiererin (17. Aug 2009)

Das ist eine methode aus dem ersten servlet, die das dispatchen auf die jsp vornimmt.


```
protected void processRequestAndDispatch(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
       
	if(con == null){
            connectionBD();
        }
        
        getModeleImportData(request);
        String login = request.getParameter("login");
        String pw = request.getParameter("pw");
        int user_id;
        if (login != null && mdp != null){
            try {
                user_id = modele.checkUser(con, login, mdp);
                //if user doesn't exist
                if (user_id == 0){
                    getServletContext().getRequestDispatcher("/HTML/UserNotFound.html").forward(request, response);
                } else {
                    
                    request.setAttribute("user_id", user_id);
		    //im Model werden Informationen aus der Tabelle Autor geholt, um sie dann auf der JSP in einer Auswahlbox darzustellen
                    modele.rechercheAutor(con);
                   
                    getServletContext().getRequestDispatcher("/JSP/getInfoFromDB.jsp").forward(request, response);

                }
            } catch (SQLException ex) {
                Logger.getLogger(ControleurImportDonneesLogin.class.getName()).log(Level.SEVERE, null, ex);
            }
        

        try {
        if (con != null)
            con.close();
            con = null;
        } catch (SQLException ex) {
            Logger.getLogger(ControleurImportDonneesLogin.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
```
Das weiterleiten auf die richtige Seite (UserNnotFound.html oder getInfoFromDB.jsp) funktioniert. Das darstellen der Autorenliste funktioniert auch.
Hier ist der form-abschnitt aus der getInfoFromDB.jsp, in der sich auch eine java-partie befindent, dich sich um das darstellen der autorenliste kümmert, und eine javascipt-funktion zum überprüfen des formulars und noch mehr input-elemente:

```
<form action="../ControleurImportDonneesGetData" method="post">

        <table>
            <tr><td>*Solution hybridation:</td><td><input type="text" name="solHybrid" id="solHybrid"></td></tr>
            <tr><td>*Temperature:</td><td><input type="text" name="tempHybrid"></td></tr>
            <tr><td>*Duree:</td><td><input type="text" name="dureeHybrid"></td></tr>
        </table>

	<input type="submit" value="Transmission">
</form>
```
und hier ist die methode des zweiten servlets ControleurImportDonneesGetData, die von doGet() und doPost() aufgerufen wird.


```
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException, SQLException {
        if(con == null){
            connectionBD();
        }

        if(request.getParameter("solHybrid") == null){
            System.out.println("solHybrid null ");
        }else{
            System.out.println("solHybrid: "+request.getParameter("solHybrid"));
        }
        
        try {
        if (con != null)
            con.close();
            con = null;
        } catch (SQLException ex) {
            Logger.getLogger(ControleurImportDonneesGetData.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
```

request.getParameter("solHybrid") ist null. Warum ???:L


----------



## programmiererin (18. Aug 2009)

habe jetzt eine lösung für das problem gefunden 
habe eine zwischenseite eingebaut, auf der sich ein link zu getInfoFromDB.jsp befindet. so habe ich eine "requestfreie" seite mittendrin, die anscheinend dafür sorgt, dass der request für das nächste formular richtig erstellt werden kann und auch wieder parameter speichert.
falls es eine elegantere lösung für dieses problem gibt, lasst es mich wissen!


----------



## HLX (18. Aug 2009)

Normalerweise sollte eine Zwischenseite nicht nötig sein.

In deinem Code ist mir leider nichts aufgefallen, was zu diesem Verhalten führen könnte. Vielleicht ist im übrigen Code irgendwas versteckt, möglicherweise in den JSP- oder JS-Skripten.


----------

