[richfaces]/[jsf]: Bei action in einer Form auch Daten aus anderer Form übertragen

paula123

Grünschnabel
Hi,

ich habe zwei Forms in richfaces, abstrakt dargestellt:

<form id="f1">
<button action="#{handler.processF2}" />
</form>

<form id="f2">
<!-- jede menge eingabesteuerelemente -->
</form>

Gibt es eine Möglichkeit in JSF/Richfaces zu sagen, dass bei einem Klick auf den Button in f1 auch die Daten aus dem Formular f2 abgeschickt werden?
Beides in ein Formular zu packen ist leider bei meiner konkreten Problemstellung nicht so einfach, daher suche ich eine andere Möglichkeit.

Vielen Dank,

paula
 
!

Aber wenn du mit deiner Action z.B. direkt Werte in die DB schreibst (eig egal was du damit tust),
kannst du intern im BackingBean diese Werte einfach in deiner Save-Action mit an die BL übergeben,
wo die Werte dann einfach mit verarbeitet werden....
Die Formulare müssen nicht zusammen gehören, um Werte eines Formular mit denen eines anderen zu verarbeiten.

Oder habe ich dich da falsch verstanden?
 
Danke für deine Antwort.

Also bei mir ist es so, dass bei einem Klick auf den Button in f1 nur die Methode processF2 aufgerufen wird. Es werden aber nicht die aktuellen Eingaben - die in F2 evtl. zwischenzeitlich gemacht wurden - mit an den Server geschickt, sodass processF2 auf alten bzw. null-Daten arbeitet. In der Backing-Beans sind die durch f2 zu füllenden Attribute nämlich veraltet bzw. leer.
 
Ich glaube ich verstehe dich immer noch nicht ganz richtig...:suspekt:

Also, ich verstehe das folgendermaßen:


Du hast eine (einzige) Jsp, die auch nur von einem einzigen BackingBean gehandelt wird.
Innerhalb dieser JSP hast du zwei verschiedene Formulare in denen jeweis andere Werte aufgenommen werden.
In dem einen Formular hast du einen Command Button der durch seine Action eine Methode aufruft,
die die Werte aus dem einen Formular benutzt.

In dem anderen Formular dasselbe, nur eben für dessen Werte.

Soweit richtig?

Also, wenn du folglich weißt, dass wenn du action f1 ausführst, du auch die Werte aus Formular 2 brauchst,
warum ist es nicht möglich einfach zu kombinieren?
Inwiefern könnten sich die Werte in dem 2. Formular noch verändern?
Da deine Variablen im BackingBean ja denselben Wert enthalten, wie der, der aktuell in deinem Formular steht,
kannst du eventuell von der DB abweichende Daten neu weg schreiben oder entsprechend verwerfen.

LG
 
Ok, also mal konkreter ein kleiner Testaufbau:

In f1 ist nur der Button f1action drin mit f1action.action=processF2.
In f2 sind die Eingabefelder f2a, f2b, f2c drin.

Vielleicht sollte ich noch dazu sagen, dass es sich um a4j-Buttons und a4j-Forms handelt (Ajax).

Der Benutzer gibt in f2a, f2b, f2c etwas ein und klickt auf den Button f1action.
Auf dem Server wird dadurch die Operation processF2 ausgeführt, die folgendes tut (Pseudocode!):

Code:
public class BackingBean
{
private String f2a = null;
private String f2b = null;
private String f2c = null;

void processF2()
{
  System.out.println(f2a);
  System.out.println(f2b);
  System.out.println(f2c);
}
}

Die Ausgabe ist dann immer null. Ich vermute, dass es daran liegt, dass bei einem Klick auf einen Button immer nur die Felder mitgeschickt werden, die in demselben Formular drin sind wie der entsprechende Button. Die entspr. Setter in der Backing Bean werden nämlich z. B. nicht aufgerufen. Packe ich den Button in das Formuar f2 geht's. Die Frage ist also nun, wie kann ich es schaffen, den Button in f1 zu lassen und beim Submit von f1 auch die Daten aus f2 an den Server zu schicken?
 
Ahhhhhhhhhhhhhhhhhhhhhhh.....
Vielleicht hättest etwas früher erwähnen sollen, dass es sich um ajax handelt ;)
Ist dein Controller denn auch ein Request oder ein Session Controller?


Bei einem Request- Controller ist zu beachten, dass dessen Gültigkeitsbereich genau eine Anfrage eines Nutzers umfasst.
Aufgrund eines möglichen Forwardings der Anfrage an weitere Servlets bzw. JSPs kann ein Request sich über mehrere JSPs oder Servlets erstrecken.

Zuerst solltest du dir genau überlegen, ob du wirklich einen request- scoped Controller brauchst, denn auch mit Session- Controllern kannst du in den
JSP's mit Ajax arbeiten.

Brauchst du aber unbedingt ein request- scoped Bean, gibt es meines Wissens nach über UIData oder über den FacesContext die Möglichkeit,
die Daten über einen Request hinaus verfügbar zu machen.
Leider ist das bei mir zu lange her, dass ich das so angewendet habe, daher müsstest du dich da selber in diese Richtung noch mal schlau machen...:p

LG
 

Neue Beiträge

Zurück