# Struts Validation Error



## lennied (2. Jul 2009)

Hallo zusammen,

stehe mal wieder vor einem Problem, was ich nicht lösen kann.
Ein paar Hintergrundinformationen:

Möchte in meiner Webanwendung Einträge editieren und validieren. 
Den Eintrag aufzurufen klappt wunderbar, es werden alle Informationen korrekt angezeigt. Jedoch beim Absenden des Formulars bekomme ich folgende FM:




> ERROR org.apache.struts.taglib.tiles.InsertTag - ServletException in '/pages/edit_planung.jsp': javax.servlet.jsp.JspException: Cannot find bean: "planung" in any scope
> org.apache.jasper.JasperException: javax.servlet.ServletException: javax.servlet.jsp.JspException: Cannot find bean: "planung" in any scope
> at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:522)
> at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:398)
> ...




Anbei noch die Einträge der struts-config.xml

[XML]
<form-bean name="EditPlanungsForm"  type="org.apache.struts.validator.DynaValidatorForm" >
<form-properties.../>
</form-bean>

<action path="/EditPlanungSpeichern" type="com.sms.struts.EditPlanungSpeichernAction" 
name="EditPlanungsForm" scope="request" 
validate="true" input="EP.editplanung">
             <forward name="success" path="/Overview.do" />
        </action>

[/XML]

Wie gesagt, der Fehler tritt beim klicken des Submitbuttons auf, der die möglichen Änderungen speichern soll. 

Noch ein Hinweis: Wenn ich in der struts-config für die action validate="false" setze,
bekomme ich keine FM. Ist aber so natürlich nicht Sinn der Sache.

Irgendjemand ne Idee??

mfG Lennie


----------



## HLX (2. Jul 2009)

In der Datei 'editplanung.jsp' greifst du in deinem Insert-Tag auf ein Attribut 'planung' zu. Dieses Attribut muss an der page, am request, an der session oder am ServletContext hängen, sonst tritt o.g. Fehler auf.

Wenn du die Struts-Validierung verwendest, wird bei Validierungsfehlern noch bevor die Action aufgerufen wird, wieder an die aufrufende Seite zurückverwiesen. Möglicherweise wird dadurch bei dir das Planungs-Attribut nicht gesetzt.

In diesem Fall setzt du entweder das Attribut auch in der Validierung oder du packst das Insert-Tag in der JSP in eine Nullabfrage:

```
<logic:notEmpty name="planung">
      ...
</logic:notEmpty>
```


----------



## lennied (2. Jul 2009)

das Attribut "planung" setze ich an folgender Stelle:

```
public class EditPlanungAction extends Action {


    public ActionForward execute(org.apache.struts.action.ActionMapping actionMapping, org.apache.struts.action.ActionForm actionForm, javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse)  {
        try{
            System.out.println("EditPlanungAction");
            DBConnection db = new DBConnection();
            httpServletRequest.setAttribute("planung", db.getEditPlanung(httpServletRequest.getParameter("p_id")));
            db.verbindungschliessen();
        }catch(Exception e){
            e.printStackTrace();
        }
        return actionMapping.findForward("success");

    }

}
```

Ist das an dieser Stelle nicht richtig?

das Einfügen der 

```
<logic:notEmpty name="planung">
      ...
</logic:notEmpty>
```
innerhalb des iteration tags hat leider nicht geholfen, oder habe ich auch hier was falsch verstanden?


----------



## lennied (2. Jul 2009)

habe das 

```
<logic:notEmpty name="planung">
      ...
</logic:notEmpty>
```
jetzt außerhalb der iterator tag gepackt, und erhalte nach absenden der Form keine FM mehr. Allerdings auch keinen Inhalt der JSP edit_planung.jsp, nur eventuelle Validator FMs. Was kann ich denn jetzt machen, dass ich wieder an die bean "planung" komme,
soll heißen, dass die bean empty ist, sobald eine FM vom Validator zurückgegeben wird.


----------



## HLX (2. Jul 2009)

Außerhalb des Iterate-Tags ist korrekt, da du den Zugriff des Iterate-Tags auf ein nicht exisitierendes Objekt verhindern musst.

Wenn du validierst und der Fehlerfall eintritt, wird deine oben aufgeführte Action nicht durchlaufen. Daher kann auch das Objekt nicht vorhanden sein, was zum Fehler führt.

Welche Lösung für das Problem sinnvoll ist, hängt vom Anwendungsfall ab. Eine Möglichkeit wäre das Setzen eines leeren Planungsobjektes in der Validate-Methode, z.B. mit

```
request.setAttribute("planung", new MyBean()");
```
Eine andere Möglichkeit wäre die Übertragung des Planungs-Objekts an die Session. Also in deiner obigen Action:

```
httpServletRequest.getSession().setAttribute("planung", db.getEditPlanung(httpServletRequest.getParameter("p_id")));
```
Dadurch stünde die Bean über mehrere Requests hinweg zur Verfügung - so lange bis die Benutzersitzung abläuft.


----------



## lennied (2. Jul 2009)

wenn ich meine Action gemäß deiner Beschreibung änder, bekomme ich ne NullPointerException:



> [http-8084-3] ERROR org.apache.struts.taglib.tiles.InsertTag - ServletException in '/pages/edit_planung.jsp': null
> org.apache.jasper.JasperException: java.lang.NullPointerException
> at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:522)
> at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:416)
> ...



eine eigene Validate Methode oder Klasse habe ich nicht erstellt. Das geschieht über die validation.xml...


----------



## HLX (2. Jul 2009)

In der JSP-Datei wird auf null zugegriffen.

Wie sieht denn die JSP Datei aus?


----------



## lennied (2. Jul 2009)

hier ein Auszug der jsp:

```
<%@page import="java.util.*"%>
<%@page import="com.ideo.sweetdevria.util.DateUtils"%>
<%@page import="org.apache.commons.lang.ArrayUtils"%>

<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-tiles" prefix="tiles" %>
<%@ taglib prefix="ria" uri="http://sweetdev-ria.ideotechnologies.com" %>

<!--Anzeigen der Fehlermeldungen...-->
<logic:messagesPresent>
    <bean:message key="errors.header"/>
    <ul>
        <html:messages id="error">
        <li><bean:write name="error"/></li>
        </html:messages>
    </ul><hr>
</logic:messagesPresent>
<script >
    function loschen(href){
        Check = confirm("Wollen Sie den Datensatz/Datei wirklich löschen?\n
                                Do you want to delete the data record or file?");
        if(Check == true){
            self.location = href;}
        else{}
    }
</script>


    <span class="headline3rot"><bean:message key="EditPlanung.title"/></span>

    <html:form action="/EditPlanungSpeichern" enctype="multipart/form-data" >
        <logic:empty name="planung">
            <% out.println("hallo");%>

        </logic:empty>
        <logic:notEmpty name="planung">
        <logic:iterate id="pl" name="planung" type="com.sms.engineering.Planung" >
        <html:hidden name="pl" property="p_id"/>
        <html:hidden name="pl" property="filename"/>
        <html:hidden name="pl" property="mimetype"/>
         .....
        </logic:iterate>
        </logic:notEmpty>
        </html:form>
```
Sobald ein Fehler beim Validieren auftaucht, geht er in das <logic:empty> tag rein.
Beim debuggen werden auch nur die jsp-Seiten gemäß tiles-defs.xml durchlaufen, 
und es wird auf keine Action zugegriffen, anders als beim Valiederen ohne Fehler.

Hier nochmal die Action mit deiner Änderung:

```
public class EditPlanungAction extends Action {


    public ActionForward execute(org.apache.struts.action.ActionMapping
 actionMapping, org.apache.struts.action.ActionForm actionForm, 
javax.servlet.http.HttpServletRequest httpServletRequest, 
javax.servlet.http.HttpServletResponse httpServletResponse)  {
        try{
            System.out.println("EditPlanungAction");
            DBConnection db = new DBConnection();
            httpServletRequest.getSession().setAttribute("planung", 
            db.getEditPlanung(httpServletRequest.getParameter("p_id")));
            //httpServletRequest.getSession().setAttribute("planung", 
            db.getEditPlanung(httpServletRequest.getParameter("p_id")));
            //httpServletRequest.setAttribute("planung", 
            db.getEditPlanung(httpServletRequest.getParameter("p_id")));
            db.verbindungschliessen();
        }catch(Exception e){
            e.printStackTrace();
        }
        return actionMapping.findForward("success");

    }

}
```


----------



## HLX (2. Jul 2009)

Der Code sieht soweit ok aus. Tritt die Exception mit oder ohne Validierungsfehler oder bei beidem auf?

Ist es definitiv ausgeschlossen, dass in dem nicht geposteten Code-Teil Zugriff auf eine Variable aus dem Planungs-Objekt erfolgt, die null ist? Löst ggf. einer der getter im Planungs-Objekt eine NullPointerException auf, weil der sie Logik, statt den reinen Rückgabewert enthält?

Sind diese Punkte auszuschließen, wäre die tiles-def.xml noch interessant.


----------



## lennied (6. Jul 2009)

Die Exception tritt nur auf, wenn bei der Validierung etwas nicht stimmt,
ansonsten läuft es ohne Probleme durch.

Ersetze ich deinen Codevorschlag 

```
httpServletRequest.getSession().setAttribute("planung", db.getEditPlanung(httpServletRequest.getParameter("p_id")));
```
durch meinen

```
httpServletRequest.setAttribute("planung", db.getEditPlanung(httpServletRequest.getParameter("p_id")));
```
bekomme ich keine exception, allerdings wie früher schonmal erwähnt, auch nur 
die Validerungsfehler angezeigt, und sonst nichts von meiner Seite.

Anbei meine tiles-defs.xml
[XML]
<tiles-definitions>
    <definition name="EP.startseite" path="/startseite.jsp">
        <put name="body" value="/pages/startseite_body.jsp"/>
        <put name="footer" value="/pages/footer.jsp"/>
        <put name="navigation" value="/pages/navigation.jsp"/>
    </definition>
    <definition name="EP.planung" extends="EP.startseite">
        <put name="body" value="/pages/startseite_planung.jsp"/>
    </definition>
    <definition name="EP.editplanung" extends="EP.startseite">
        <put name="body" value="/pages/edit_planung.jsp"/>
    </definition>
    <definition name="EP.overview" extends="EP.startseite">
        <put name="body" value="/pages/overview.jsp"/>
    </definition>
    <definition name="EP.todo" extends="EP.startseite">
        <put name="body" value="/pages/todo.jsp"/>
    </definition>

</tiles-definitions>
[/XML]


----------



## HLX (6. Jul 2009)

Ich sehe gerade, dass du in der Struts-Config eine Weiterleitung "success" auf "/Overview*.do*" hast. Gibt es noch eine Overview-Action? Wenn ja, was steht darin und wie sieht das Action-Mapping dazu aus?


----------



## lennied (6. Jul 2009)

struts-config.xml
[XML]
<action path="/Overview" type="com.sms.struts.GesamtPlanungAction">
            <forward name="success" path="EP.overview" />
        </action>
[/XML]


```
package com.sms.struts;

import com.sms.engineering.*;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForward;

public class GesamtPlanungAction extends Action {


    public ActionForward execute(org.apache.struts.action.ActionMapping actionMapping, 
org.apache.struts.action.ActionForm actionForm, 
javax.servlet.http.HttpServletRequest httpServletRequest,
 javax.servlet.http.HttpServletResponse httpServletResponse)  {
        try{
            System.out.println("gesamtplanungaction");
            Planung pl = new Planung();
            httpServletRequest.setAttribute("planung", pl.getGesamtPlanung());   
        }catch(Exception e){
            e.printStackTrace();
        }
        return actionMapping.findForward("success");

    }

}
```

eigentlich nichts besonderes wie ich finde...


----------



## HLX (7. Jul 2009)

Nichts besonderes? :shock:

Du hängst das Attribut "planung" in dieser Action an den Request. Selbst wenn du es in der anderen Action zuvor als Session-Attribut abgelegt hast, wird das aus dem Request (also aus der GesamtplanungAction) genommen, weil die Struts-Tags das erstbeste Attribut nehmen, dass sie finden und dabei zuerst im Request nachsehen. Das Session-Attribut wird also völlig ignoriert.

Wenn du "planung" in der EditPlanungAction als Requestattribut anlegst, wird es in der GesamtplanungAction überschrieben. Die Zuweisung in EditPlanungAction ist also wirkungslos.

Warum setzt du das Attribut "planung" zweimal?


----------



## lennied (7. Jul 2009)

Ups, das war mir nicht bewußt...

Bin aber einen Schritt weiter gekommen. Die NullPointerException kommt von ganz woanders her, so wie du das schon des öfteren vermutet hast.
Benutze für Termineinträge tags der Library SweetDevRia. Sobald ein Validierungsfehler auftritt, 
und die Seite neu geladen wird, tritt bei diesen tags, bzw. bei der Zuweisung der Termine die Exception auf.

Erläuterung:

```
<jsp:useBean id="myBean2" class="com.sms.engineering.Planung" scope="page">
            <jsp:setProperty name="myBean2" property="datum" />
        </jsp:useBean>
```


```
request.setAttribute("cal1", myBean2.getDatum(request.getParameter("p_id"),1));
```
hier belege ich "cal1" mit dem Datum aus der DB, was beim Anlegen der Planung
(wir sind ja im Editiermodus der einzelnen Planung) ausgewählt wurde.

anschließend belege ich das <ria:calendar> tag mit dem Wert "cal1"

```
<ria:calendar id="cal_vergabetermin" preselectString="${cal1}" displayedMonths="3" popup="true">
                <img src="./resources/images/calendar.gif" class="calendarIcon" alt="Calendar" />
            </ria:calendar>
```
beim ersten Aufruf des Editiermodus klappt das auch wunderbar, nur sobald 
ein Validierungsfehler auftritt, erhalte ich bei den ria:tags eine NullPointerException.

Auffällig ist des weiteren, dass wenn ein Validierungsfehler auftritt, 
ich die FM für das Feld erhalte, dass diesen Fehler auslöst, dieser Falsche Wert aber
wieder mit dem Wert aus der DB überschrieben wird. Hoffe du verstehst was ich meine.

Summasumarum, einen Fehler gelöst, aber zwei neue erhalten...:toll:


----------



## HLX (7. Jul 2009)

lennied hat gesagt.:


> beim ersten Aufruf des Editiermodus klappt das auch wunderbar, nur sobald
> ein Validierungsfehler auftritt, erhalte ich bei den ria:tags eine NullPointerException.


Vermutlich, weil nach der Validierung der Request-Parameter "p_id" nicht mehr vorhanden ist und somit der Datums-Getter null liefert.

Um zu verstehen, wo das Problem liegt, wäre es gut, die JSP-Seite mal im Gesamtzusammenhang zu sehen. Ich kann die Code-Fragmente irgendwie nicht richtig zuordnen. Wo geschieht das 'request.setAttribute("Cal"...' etc.?


----------



## lennied (7. Jul 2009)

Vorab erstmal vielen Dank für deine Mühen und zahlreichen Tipps, 
die du mir bisher gegeben hast!!



> Vermutlich, weil nach der Validierung der Request-Parameter "p_id" nicht mehr vorhanden ist und somit der Datums-Getter null liefert.


yep, das ist korrekt, habe das auch schon ansatzweise gelöst indem ich, leider nur statisch bisher, im <html:form> tag die "p_id" als Parameter übergebe

```
<html:form action="/EditPlanungSpeichern?p_id=69" enctype="multipart/form-data" method="post" >
```

Frage für zwischendurch: Wie bekomme ich das dynamisch hin??
Sowas wie 

```
String id = request.getParameter("p_id");
```


```
<html:form action="/EditPlanungSpeichern?p_id=<%=id%>" enctype="multipart/form-data" method="post" >
```
funktioniert leider nicht...er löst die "id" nicht auf...

anbei noch die komplette jsp-seite:

```
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import="java.util.*" %>


<%@page import="com.ideo.sweetdevria.page.Page"%>
<%@page import="com.ideo.sweetdevria.page.PageManager"%>
<%@page import="com.ideo.sweetdevria.taglib.fileUpload.model.FileUploadModel"%>
<%@page import="java.util.*"%>
<%@page import="com.ideo.sweetdevria.util.DateUtils"%>
<%@page import="org.apache.commons.lang.ArrayUtils"%>
<%@page import="com.sms.engineering.*"%>

<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-tiles" prefix="tiles" %>
<%@ taglib prefix="ria" uri="http://sweetdev-ria.ideotechnologies.com" %>

<!--Anzeigen der Fehlermeldungen...-->
<logic:messagesPresent>
    <bean:message key="errors.header"/>
    <ul>
        <html:messages id="error">
        <li><bean:write name="error"/></li>
        </html:messages>
    </ul><hr>
</logic:messagesPresent>
<script >
    function loschen(href){
        Check = confirm("Wollen Sie den Datensatz/Datei wirklich löschen?\nDo you want to delete the data record or file?");
        if(Check == true){
            self.location = href;}
        else{}
    }
</script>
     <jsp:useBean id="myBean2" class="com.sms.engineering.Planung" scope="page">
            <jsp:setProperty name="myBean2" property="datum" value="06-04-2009" />
        </jsp:useBean>
        <jsp:useBean id="myBean" class="com.sms.engineering.Planung" scope="session">
            <jsp:setProperty name="myBean" property="aos"  />
        </jsp:useBean>
<%

         String cal1 = myBean2.getDatum(request.getParameter("p_id"),1);
         String cal2 = myBean2.getDatum(request.getParameter("p_id"),2);
         String cal3 = myBean2.getDatum(request.getParameter("p_id"),3);

         Calendar cal = new GregorianCalendar( TimeZone.getTimeZone("ECT") );
         out.println("cal1:"+cal1);
         
         if (cal1.equals("")){ // || cal1.equals(null)){
            cal1 = (cal.get(Calendar.MONTH)+1) +"-"+(cal.get(Calendar.DATE))+"-"+cal.get(Calendar.YEAR);
         }
         request.setAttribute("cal1", cal1);
         if (cal2.equals("")){
            cal2 = (cal.get(Calendar.MONTH)+1) +"-"+(cal.get(Calendar.DATE))+"-"+cal.get(Calendar.YEAR);
         }
         request.setAttribute("cal2", cal2);
         if (cal3.equals("")){
            cal3 = (cal.get(Calendar.MONTH)+1) +"-"+(cal.get(Calendar.DATE))+"-"+cal.get(Calendar.YEAR);
         }
         request.setAttribute("cal3", cal3);
       
         String[] s = myBean.getAos(request.getParameter("p_id"));
         String orga = s[0];
         String id = request.getParameter("p_id");
         String sparte = s[1];
         String anrede = s[3];
         String status = s[4];
    %>
       

    <span class="headline3rot"><bean:message key="EditPlanung.title"/></span>
    <logic:notEmpty name="planung">
        <logic:iterate id="pl" name="planung" type="com.sms.engineering.Planung" >
            <html:form action="/EditPlanungSpeichern?p_id=69" enctype="multipart/form-data" method="post" >
        
        <html:hidden name="pl" property="p_id"/>
        <html:hidden name="pl" property="filename"/>
        <html:hidden name="pl" property="mimetype"/>
        
    <table border="0" cellspacing="0" cellpadding="0">
    <tr><td><bean:message key="organisation"/></td><td><bean:message key="abteilung"/></td><td><bean:message key="engineering"/></td></tr>

    <tr><td align=left><html:select value="<%=orga%>" property = 'organisation' indexed="Organisation" size="1">
            <html:option value="1">Orga1</html:option>
            <html:option value="2">Orga2</html:option>
            <html:option value="3">Orga3</html:option>
        </html:select>
    </td>
    <td align=left>

        <html:text name='pl' property = 'abteilung'/>
     </td>
     <td align=left><html:select value="<%=sparte%>" property = 'engineering'size="1">
             <html:option value="1">Maschinenbau</html:option>
             <html:option value="2">Stahlbau</html:option>
             <html:option value="3">Hilfseinrichtungen</html:option>
             <html:option value="4">Antriebstechnik</html:option>
             <html:option value="5">EA</html:option>
             <html:option value="6">Fundamente</html:option>
             <html:option value="7">Hydraulik</html:option>
             <html:option value="8">Medien (sonstige)</html:option>
             <html:option value="9">Rohrleitungen</html:option>
             <html:option value="10">Sonstige</html:option>

        </html:select></td>
    <TD><font color="#FF0000" size=1>Bitte ändern Sie bei Bedarf Organisationseinheit,<br>
                                     Abteilung und Engineeringthema!!
        </font></TD>
     </tr>
     </table><p></p>
     <table border="0" cellspacing="0" cellpadding="0" width="500">
    <tr><td><bean:message key="KW/Jahr"/>:</td>
        <td><bean:message key="cadsystem"/>:</td>

    </tr>
    <tr>
        <td>
            <ria:calendar id="cal_vergabetermin" preselectString="${cal1}" displayedMonths="3" popup="true">
                <img src="./resources/images/calendar.gif" class="calendarIcon" alt="Calendar" />
            </ria:calendar>
        </td>

        <td><html:textarea name='pl' property='cad' /></td>
    </tr>
    <tr><td><bean:message key="anfang"/>:</td>
        <td><bean:message key="ende"/>:</td></tr>
    <tr><td>
            <ria:calendar id="cal_anfang" preselectString="${cal2}" displayedMonths="3" popup="true">
                <img src="./resources/images/calendar.gif" class="calendarIcon" alt="Calendar" />
            </ria:calendar>
        </td>
        <td>
            <ria:calendar id="cal_ende" preselectString="${cal3}" displayedMonths="3" popup="true">
                <img src="./resources/images/calendar.gif" class="calendarIcon" alt="Calendar" />
            </ria:calendar>
        </td>
</tr>
</table><p></p>
<table border="0" cellspacing="0" cellpadding="0" width="500">
<tr>
    <td><bean:message key="kennwort"/>:</td><td><html:text name='pl' property = 'kennwort'/></td>
    <td></td>
</tr>
<tr>
    <td><bean:message key="auftrag"/>:</td><td><html:text name='pl' property = 'auftrag' /></td>
    <td></td>
</tr>
<tr>
    <td><bean:message key="gegenstand"/>:</td><td><html:text name='pl' property = 'gegenstand' /></td>
    <td></td>
</tr>
<tr>
    <td><bean:message key="bemerkung"/>:</td><td><html:text  name='pl' property = 'bemerkung' /></td>
    <td></td>
</tr>
<tr><td>User:</td><td><html:text property = 'user'  readonly="true" value="<%=request.getRemoteUser()%>"/></td>
    <td></td>
</tr>
</table> <p></p>
<table border="0" cellspacing="0" cellpadding="0" width="500">
<tr><td><u><bean:message key="ansprechpartner"/>:</u></td><td></td></tr>
</table><p></p>
<table border="0" cellspacing="0" cellpadding="0" width="500">

<tr><td><bean:message key="anrede"/>:</td><td>
        <html:select value="<%=anrede%>" property = 'anrede'size="1">
             <html:option value="1">Herr</html:option>
             <html:option value="2">Frau</html:option>
        </html:select></td></tr>
<tr><td><bean:message key="vorname"/>:&nbsp;</td><td><html:text name='pl'  property = 'vorname'/></td>
    <td><bean:message key="nachname"/>:&nbsp;</td><td><html:text  name='pl' property = 'nachname'/></td></tr>
<tr><td><bean:message key="tel"/>:&nbsp;</td><td><html:text  name='pl'  property = 'telefon'/></td>
</table><p></p>
<table border="0" cellspacing="0" cellpadding="0" width="500">
<bean:message key="spec"/>: <font color="red"><a href="\\shilapp02.de.sms-demag.com\downloads\<bean:write name='pl' property='filename'/>"  type="<bean:write name='pl' property='mimetype'/>">
                            <bean:write name="pl" property="filename"/></a></font>
                            <logic:notEqual name="pl" property="filename" value="">
                                <a href="javascript:loschen('<html:rewrite page="/FileDelete.do" paramId='p_id' paramName='pl' paramProperty='p_id'/>')" title='löschen/delete'>
                                    <span class='headline3rot'>[x]</span></a>
                            </logic:notEqual>
        
                            <br><br>
<logic:equal name="pl" property="filename" value="">
    <html:file property="file" /><br><br>
</logic:equal>
<bean:message key="status"/>:<html:select value="<%=status%>" property = 'status_id' size="1">
            <html:option value="1">geplant</html:option>
            <html:option value="2">vergeben</html:option>
        </html:select>

</table><p></p>
     <table>
     <tr><td><html:submit value= "Änderungen speichern"/></td></tr>
     <tr><td><html:reset value="zurücksetzen"/></td></tr>
     </table>
   </html:form>
</logic:iterate>
</logic:notEmpty>
```


----------



## lennied (7. Jul 2009)

das aber funktioniert???

```
String id = "/EditPlanungSpeichern?p_id="+request.getParameter("p_id");
```


```
<html:form action="<%=id%>"  enctype="multipart/form-data" method="post" >
```
mh, das überrascht mich jetzt aber...


----------



## HLX (8. Jul 2009)

Mich auch. Müsste es nicht 

/EditPlanungSpeichern*.do*?p_id="+request.getParameter("p_id");

heißen? (Es sei denn du hast das Servlet-Mapping des ActionServlet nicht in der web.xml gesetzt)

Die JSP-Seite enthält verdammt viel Quellcode. Das gehört eigentlich in eine Action. Du solltest die JSP-Seite zunächst ausschließlich über eine Action aufrufen. In dieser wertest du deinen Request-Parameter "p_id" aus und setzt alle nötigen Objekte (cal1, cal2 etc.) als Request-Attribute. Leite erst dann an die JSP-Seite weiter. Möglicherweise brauchst du den Request-Parameter dort sogar nicht mehr. Falls doch, setze auch ihn in der Action als Request-Attribut und verwende fortan dieses.


----------

