Zum Inhalt springen

Struts Form-Übergabe


Frozone

Empfohlene Beiträge

[1] habe eine Form für User, möchte jetzt einen User bearbeiten, also will ich das Formular vorher mit den daten ausfüllen.

ich weiß das ich vorher in einer action die form übergeben muß. ABER WIE?

wie verändere sende ich die Form mit das er das erkennt?

[2] wenn ich neuen User eingebe wird das Formular aus alten daten schon vorgefüllt (weiß zwar leider nicht wie, siehe 1.) aber würde gerne dafür sorgen das es nicht vorfgefüllt wird. eine reset methode gibt es schon in der Form.

Danke für Hilfe

Link zu diesem Kommentar
Auf anderen Seiten teilen

Um was handelt es sich denn da? WebApplication oder aber "reines" Java?

Ne Bean ist nichts anderes (vereinfacht) als ein Datencontainer, d.h. du hast deine View schicht, deine Logik und deine DataModel. In der Logik greift du auf die Daten zu, füllst die Bean und gibst diese an die View. Das wars eigentlich schon (vereinfacht).

Link zu diesem Kommentar
Auf anderen Seiten teilen

Moin,

so, es gibt hier einen Ansatz, der funktioniert. Diesen haben wir schon in einigen Projekten eingesetzt.

Also, nehmen wir an Du hast ein Menü und willst von dort auf die Form gehen. Aktuell hast Du vermutlich direkt die Form verlinkt (also die JSP) welche anschliessend die Action ausführt. Richtig ist, dass Du hier keine Chance hast das vorher zu befüllen.

Also fügen wir eine PrepareAction ein. Das ist einfach nur eine Action, die einige Dinge tut bevor Sie auf die JSP forwarded. Du erstellst also eine neue Action (MyPrepareAction) und legst diese in der StrutsConfig an (myPrepareAction.do). Als Forward gibst Du dann die Seite an, die Du anzeigen möchtest. Wenn Du nun der PrepareAction die gleiche Form übergibst (Parameter name=FormName) dann kannst Du diese hier befüllen.

Das ganze läuft dann so ab, dass Du im Menü klickst, die PrepareAction wird aufgerufen welche die Maske befüllt. Diese macht ein Forward auf die Form, welche nun angezeigt wird. Bei Submit wird dann die SubmitAction ausgeführt und der Inhalt verarbeitet.

Ist doch ganz einfach :)

Gruß Thomas

Link zu diesem Kommentar
Auf anderen Seiten teilen

könnte bitte jemand mal einen solchen eintrag aus der struts-config und aus der action hier posten. damit ich es mal abschauen kann?

kriege in der config immer fehlermeldung das nicht alles beschrieben ist und der form krieg ich auch nicht gefüllt, da es die setter nciht kennt.

danke

Link zu diesem Kommentar
Auf anderen Seiten teilen

OK hier ein Auszug aus meinem QC:

Mapping:

<action path="/prepare"

type="action.PrepareAction">

<!-- <parameter name="userForm"/> -->

<forward name="edituser" path="/form/edituser.jsp"/>

</action>

Irgendwie funktioniert das mit dem parameter noch nicht so, da fehlt definitiv noch etwas!?

Action: tja da weiß ich ja nicht wie ich's machen soll.

Form: besteht halt aus getter/setter von paar strings.

JSP: <html:form action="/edituser">

<table>

<tr>

<td><bean:message key="userinput.jsp.table.id"/> :</td>

<td><input typ="text" name="firstname" /> </td>

</tr>

</table>

</html:form>

nen kleiner auszug

Wäre über Hilfe in bezug auf das mapping für die prepareAction dankbar,

und wie ich in der action die form für die jsp fülle.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also Erbeere hat schon gut erklärt.

1. Du hast jetzt eine PrepareAction die über setter die Felder der Form füllt?

2. Diese PrepareAction muss am Ende ein forward auf deine JSP machen.

z.B. forward = mapping.findForward("einstellung");

return forward;

3. Im struts-config.xml muss zB. ein <forward name="einstellung" path="einstellung.jsp"></forward> ausserhalb des <action> sein.

4. Wenn du die 3 Punkte hast, sollte wenn du die prepareAction.do aufrufst deine JSP mit gefüllten Werten erscheinen.

Wenn nicht, poste den Quellcode und Namen der von Jaraz geforderten Dateien.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das hab ich soweit auch alles schon verstanden und ist auch kein Problem, aber wie übergebe ich der PrepairAction die Form, damit ich sie auch füllen kann?

das was Erdbeere geschrieben hat "(Parameter name=FormName)" gibts ne Fehlermeldung weil für Parameter ja was angegeben werden muß.

könnte denn nicht jemand mal den kompletten eintrag in der config für so eine prepareAction posten?

Link zu diesem Kommentar
Auf anderen Seiten teilen

...aber wie übergebe ich der PrepairAction die Form, damit ich sie auch füllen kann?

In der PrepareAction musst du sowas wie:

EinstellungForm einstellungForm = (EinstellungForm) form;

stehen haben, dann kannste

einstellungForm.setName("Meier);

einstellungForm.setVorname("Peter");

machen.

1. Wie heist deine ActionForm?

2. Poste die PrepareAction!

3. Wie heisst deine JSP?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also soweit ist mir das alles klar, hab ich auch vorher schon gemacht.

aber kriege dann immer den Fehler:"java.lang.NullPointerException"

weil er die Form in der PrepareAction nicht kennt.

<action path="/prepare"

type="de.struts.action.PrepareAction">

<forward name="edit" path="/form/edituser"/>

</action>

das ist meine config zu der prepareaction, wie gebe ich da noch an das die action die form auch kennt. das ist wirklich mein einziges problem anstonsten krieg ich das schon ganz gut hin.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Erst mal nimmste das forward-Tag da aus dem <action> raus! und schreibst es ausserhalb!!

Dann passt du den action-Tag so an das es so aussieht:

<action name="einstellungForm" path="/einstellungAction" scope="session" type="de.ticket.ticketweb.actions.EinstellungAction">
</action>[/PHP]

Musst du halt auf deine Benamsung ändern und den Teil

[PHP]de.ticket.ticketweb.actions.EinstellungAction

passt du dann auch auf deine Paketstruktur an!

Bei weiteren Fragen, poste bitte die PrepareAction.java!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn ich das mache bekomme ich den Fehler "No input attribute for mapping path /prepare" das Problem hatte ich in dem Thread schon weiter vorher mal beschrieben. das "scope=session" muß ich das für die Form vielleicht noch woanders setzen damit die Form bekannt ist?

meine prepareAction:

public ActionForward doExecute(

ActionMapping mapping,

ActionForm form,

HttpServletRequest request,

HttpServletResponse response)

throws Exception {

EinstellungForm ef = (EinstellungForm) form;

ef.setSurname("Nachname");

return mapping.findForward("edit");

}

meine form dazu:

<form-bean name="einstellungForm"

type="de.struts.form.EinstellungForm"/>

fals das hilft?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn ich das mache bekomme ich den Fehler "No input attribute for mapping path /prepare" das Problem hatte ich in dem Thread schon weiter vorher mal beschrieben. das "scope=session" muß ich das für die Form vielleicht noch woanders setzen damit die Form bekannt ist?

meine prepareAction:

public ActionForward doExecute(

ActionMapping mapping,

ActionForm form,

HttpServletRequest request,

HttpServletResponse response)

throws Exception {

EinstellungForm ef = (EinstellungForm) form;

ef.setSurname("Nachname");

return mapping.findForward("edit");

}

fals das hilft?

1. Die Form heisst auch EinstellungForm?

2. Die jsp heisst wie?

3. in der struts-config.xml gibts

<forward name="edit" path="NameDerJSP.jsp"></forward>
?

4. In der struts-config.xml schreibst du in das action-Tag:

validate="false" input="NameDerJSP.jsp"

Ungefähr so:

<action name="einstellungForm" path="/forwardEinstellungAction" scope="session" type="de.ticket.ticketweb.actions.forwardEinstellungAction"  validate="false" input="einstellung">
</action>[/PHP]

Link zu diesem Kommentar
Auf anderen Seiten teilen

<action path="/prepare"

type="de.struts.action.PrepareAction"

name="einstellungForm"

scope="request"

parameter="action"

validate="false"

input="/form/edituser.jsp">

<forward name="edit" path="/form/edituser.jsp"/>

</action>

nix scope=session, das erzeugt den Effekt, dass das Formular immer mit den vorherigen Daten gefüllt wird.

Link zu diesem Kommentar
Auf anderen Seiten teilen

1. Die Form heisst auch EinstellungForm?

2. Die jsp heisst wie?

3. in der struts-config.xml gibts ?

4. In der struts-config.xml schreibst du in das action-Tag:

validate="false" input="NameDerJSP.jsp"

Ungefähr so:

<action name="einstellungForm" path="/forwardEinstellungAction" scope="session" type="de.ticket.ticketweb.actions.forwardEinstellungAction"  validate="false" input="einstellung">
</action>[/PHP]

1.heißt bei mir anders, hab sie aber bei mir in config auch richtig benannt.

2. edituser.jsp

3. ja gibts es!

4.gemacht.

so nun gibts keinen Fehler, aber er füllt die Felder nicht.

ist es richtig das ich bei der prepare als "input" die JSP in der gefüllt werden soll angebe?

Auszug aus jsp:

<td><bean:message key="userinput.jsp.table.surname"/> :</td>

<td><html:text property="surname"/>

</td>

<td><html:errors property="surname"/></td>

Link zu diesem Kommentar
Auf anderen Seiten teilen

1.heißt bei mir anders, hab sie aber bei mir in config auch richtig benannt.

Dann machts keinen Sinn, dass du hier

EinstellungForm ef = (EinstellungForm) form;

ef.setSurname("Nachname");

das in der PrepareAction stehen hast!

Schreib da den Namen deiner Form hin, anstatt EinstellungForm.

In der JSP:

<html:text name="nameDerForm" property="surname"/>

Link zu diesem Kommentar
Auf anderen Seiten teilen

In der JSP:

<html:text name="nameDerForm" property="surname"/>

das name="formname" hat in der jsp gefehlt. danke es geht.

und natürlich hatte ich in meiner Action meinen Formnamen verwendet.

vielen dank für die Hilfe,und Jaraz hat recht: session: request

so thread ist damit geschlossen ;-) :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...