# mehrere submit-buttons in einer jsp



## baer1208 (22. Mrz 2005)

hy @ all!

ich hab in meiner jsp mehrere submit-buttons! jedesmal soll ne andere action kommen...wie geht das...hab schon folgendes probiert:


```
<html:form action="/ausgabeAction.do" method="forward" >
      <html:submit styleClass="cssMenu" value="Ausgabe" property="ausgB"/>

    </html:form>

    <html:form action="/produktivitaetsAction.do" method="forward" >
      <html:submit styleClass="cssSubmenu" value="Produktivitätsausgabe" property="prodAusgB"/>

    </html:form>

    <html:form action="/zusaetzlicheAction.do" method="forward" >
      <html:submit styleClass="cssSubmenu" value="Zusätzliche Ausgaben" property="zAusgB"/>

    </html:form>

    <html:form action="/logoutAction.do" method="forward" >
      <html:submit styleClass="cssMenu" value="Logout" property="logoutB"/>
    </html:form>
```

die action:

```
public ActionForward execute(ActionMapping actionMapping,
                                 ActionForm actionForm,
                                 HttpServletRequest servletRequest,
                                 HttpServletResponse servletResponse) {
        return actionMapping.findForward("output");
    }
```

nur leider funktioniert das nicht!

hier ist es relativ einfach (dachte ich mir) da keine formulardaten ausgelesen werden müssen...also nur weiterleitung!

bitte um hilfe!

ciao baer


----------



## bambi (22. Mrz 2005)

Was meinst Du mit 


			
				baer1208 hat gesagt.:
			
		

> nur leider funktioniert das nicht!


Was passiert denn bzw. passiert denn nicht? Bekommst Du eine Exception, ... Etwas genauer waer' ganz nett...  :wink:


----------



## baer1208 (22. Mrz 2005)

es sollten die buttons angezeigt werden! doch werden sie nicht! da die jsp in eine andere "included" wird, wird auch der ganze code nach dem include dieser jsp nicht angezeigt!

die exception sagt was von ner form-bean null...
es ist dafür keine form-bean definiert! weil es ja auch unnötig ist, da es einfach ein forward sein soll...also ohne form-bean! 
ist zu verstehen wie eine navigation!

genauer genug? ;-)

ciao baer


----------



## bambi (22. Mrz 2005)

Ich denke nicht, dass es irgendwie an Deinem Forward liegt. Selbst dann muessten die Buttons ja wenigstens angezeigt
werden. Ich kann mir hoechstens vorstellen, dass es was mit der JSP zu tun hat, die Deine (ich sach' mal) Button-JSP
einbindet. Vielleicht solltest Du da mal reinsehen... Falls es nicht klappt, dann kannst Du ja noch mal Deine Haupt-JSP posten.

Mit der Exception kann ich jetzt leider auch nichts anfangen - sorry...


----------



## baer1208 (22. Mrz 2005)

ich denke nicht,dass es ein hindernis ist, nur wenn die actionForm fehlt! es sollte ein ganz normales forward werden...steh zur zeit anscheinend total auf d leitung!

hier d code der haupt-jsp:

```
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/struts-nested.tld" prefix="nested" %>
<%@ taglib uri="/WEB-INF/struts-template.tld" prefix="template" %>
<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>

<html:html>
<table width="98%" border="0">
  <tr>
    <td width="14%" height="74">
      
      <jsp:include page="logo.jsp" flush="true" />
    </td>
    <td width="77%">
      
    </td>
    <td width="9%">
      
      <jsp:include page="logo_vmi.jsp" flush="true" />
    </td>
  </tr>
  <tr>
    <td height="428">
      
      <jsp:include page="navigation_manager.jsp" flush="true" />
    </td>
    <td colspan="2">

      <head>
        <title>
          index
        </title>
      </head>
        <jsp:useBean id="bean0" scope="session" class="manager.LoginBean" />
        <jsp:setProperty name="bean0" property="*" />
        <body>
        

Welcome
          <bean:write name = "loginActionForm" property="s_userid"/>
          <bean:write name = "loginActionForm" property="s_password"/>
        !</p>
        </body>

    </td>
  </tr>
  <tr>
    <td height="73" colspan="3">
      
      <jsp:include page="footer.jsp" flush="true" />
    </td>
  </tr>
</table>
</html:html>
```

wenn ich den teil mit der navigation auskommentiere, dann sieht man alles...also content u footer, wenn nicht streikt es ab der navigation!
in der navigation.jsp (button-jsp) sehe ich keinen fehler! das sind einfach 4 action forms denen jedem button eine neue action-klasse zugewiesen wird, eben damit, dass sie auf eine andere seite verweisen!

die action sagt immer

```
...
return actionMappings.findForward("ziel");
```

any idea?


----------



## daLenz (23. Mrz 2005)

hei bear, 

in deiner struts-config musst du eine form-bean für die button-jsp definieren! (desshalb ja auch die exception)

ich würde es so versuchen:

--> jsp

```
...
<html:form action="/eineAction.do" method="forward" > 

      <html:submit styleClass="cssMenu" value="Ausgabe" property="allegleich"/>
 

      <html:submit styleClass="cssSubmenu" value="Produktivitätsausgabe" property="allegleich"/>
 

      <html:submit styleClass="cssSubmenu" value="Zusätzliche Ausgaben" property="allegleich"/>
 
  
      <html:submit styleClass="cssMenu" value="Logout" property="allegleich"/> 
    
</html:form> 
...
```


-->struts-config.xml

```
...
<form-bean name="Form" 	type="org.apache.struts.validator.DynaValidatorForm">
		
    <form-property name="allegleich" 	        type="java.lang.String"/>
				      			      	       
</form-bean>
...
```


nun musst du in der action nur noch auslesen (allegleich) und je nach value richtig weiterleiten...

vielleicht hilft dir dies ja weiter...

p.s so wäre auch die anwendungslogik nicht mehr in dr jsp sondern in der action...

greetz


----------



## baer1208 (23. Mrz 2005)

danke!

hab meine struts-config erweitert um die form-bean, doch versteh ich nicht ganz wie ich in der action (NavigationAction) den wert von "allegleich" abfragen soll...

also ich kenn das mit z.B. e.getSource() - ist das dasselbe prinzip?? wie wende ich das aber hier an?? da d property all the same is weiß ers ja nicht wohin...

könntest das mir etwas näher erklärn?? wär super!

tia
ciao baer


----------



## daLenz (23. Mrz 2005)

du kannst das in der action etwa so machen:


```
String whichButton = (String) PropertyUtils.getSimpleProperty(form, "allegleich");

if(whichButton.equals("hier der value des gewünschten buttons")){
ein forward
}else if(whichButton.equals...{
ein anderer forward
} etc.

// hier evtl. noch ein forward auf eine fehlerseite...denn bis hier sollte es nicht gehen
```

und in der struts-config in der action alle forwards noch angeben...

greetz


----------



## baer1208 (23. Mrz 2005)

thx for your help!

ich habs gleich probiert und einen Fehler in folgender zeile bekommen:

```
String s_value = (String) PropertyUtils.getSimpleProperty(NavigationActionForm, "all_the_same");
```
die NavigationActionForm ist folgendermaßen in struts-config.xml deklariert:

```
<form-bean name="NavigationActionForm" type="org.apache.struts.validator.DynaValidatorForm">
      <form-property name="all_the_same" type="java.lang.String" />
    </form-bean>
----------
    <action name="navigationActionForm" parameter="method" path="/navigationAction" scope="request" type="manager.NavigationAction" validate="false">
      <forward name="output" path="/WEB-INF/pages/output.jsp" redirect="true" />
      <forward name="output_extra" path="/WEB-INF/pages/output_extra.jsp" />
      <forward name="login" path="/login.jsp" />
    </action>
```
der code in der NavigationActionForm :

```
package manager;

import org.apache.struts.validator.DynaValidatorForm;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMapping;
import javax.servlet.http.HttpServletRequest;

public class NavigationActionForm extends DynaValidatorForm {
    public ActionErrors validate(ActionMapping actionMapping,
                                 HttpServletRequest httpServletRequest) {
        return null;
    }

    public void reset(ActionMapping actionMapping,
                      HttpServletRequest servletRequest) {
    }
}
```
der error:

```
"NavigationAction.java": cannot find symbol; symbol  : variable NavigationActionForm, location: class manager.NavigationAction at line 17, column 67
```
ich denke,dass der fehler in der NavigationActionForm liegt...
ich hatte zuerst eine gleichnamige form gehabt...die hatte ich gelöscht, und einfach "actionDesigner" ne form hinzugefügt und so benannt...der code von der NavigationActionForm  bzw. die bean selbst gibts jez komischerweise gar nicht mehr...

es ist nicht machbar von einer jsp ne actionForm zu machen, wenn keine input-felder vorhanden sind, nur buttons!

ciao baer


----------



## daLenz (23. Mrz 2005)

hast du schon einmal mit dynavalidatorform gearbeitet? mit dieser form musst du keine "eigene" schreiben! diese wird dir vom struts-framework erstellt!

desshalb benötigst du deine klasse NavigationActionForm nicht!

du rufst deine Action-Form mittels ....getSimpleProperty(NavigationActionForm.... auf, ist die auch in der execute-Methode so definiert? ist sie dort nicht als ActionForm form definiert? liegt wahrscheinlich an dem...


greetz!


----------



## baer1208 (24. Mrz 2005)

hab noch nie damit gearbeitet! 
ich probiers aus und dann geb ich wieder bescheid!!

danke nochmal für die hilfe!! echt super!
fettes danke!

ciao baer


----------



## baer1208 (11. Apr 2005)

danke für die vielen vorschläge! habs zur zeit nur "schirch" gemacht...also in d jsp...zeitmangel! aber die anderen wege werd ich noch ausprobiern wenn zeit dazu ist!

danke für die große teilnahme an meinem problem!

ciao baer


----------

