# J2EE WebAnwendung - Umfrage - Planung/Techniken



## KSG9|sebastian (28. Jul 2005)

Hi Leute...

ich hab von meinem Chef die Aufgabe bekommen, eine WebAnwendung zu programmieren, die eine Umfrage darstellt. Der Aufbau der Umfrage (die fragen, texte u.s.w.) kommen über ein XML-File rein.

Infos zur Umfrage:

- im XML steht immer genau eine umfrage
- eine umfrage besteht aus 1 - x seiten
- eine umfrage hat einen kurzen anlesertext
- eine seite enthält 0 - n fragen
- jede Seite hat zur Navigation einen "Vorherige Seite" und "Nächste Seite" - Button

Infos zu Fragen:

- Es gibt Fragen bei denen man als Antwort ein Textfeld oder ne Textarea hat (welches HTML-Element wird über ein Attribut übergeben)
- Es gibt Fragen bei denen man als Antworten Checkboxen, Radiobuttons, Listfelder hat (welches HTML-Element man haben will wird als Attribut übergeben)


Vorgabe ist, dass das XML mittels XSL transformiert wird. Somit darf ich in den Java-Klassen nichts mit dem XML machen. Dabei hab ich folgende Probleme:

- Wenn eine Antwort abgegeben wurde und der "Nächste Seite" Button wird gedrückt muss ich mir die Antwort merken, wenn der User dann auf "Vorherige Seite" klickt soll seine antwort schon ausgewählt sein. Wie kann ich mir die Antworten sinnvoll merken ? Ich weiß in der JavaKlasse halt nicht welche Fragen und Antworten es gibt! Ich transformier das XML mittels Xalan.
- Ich weiß nicht welche Technik(Struts, JSF, JSP...) ich benutzen soll, habt ihr da ne Idee ?


Habt ihr allgemein eine Idee wie das sinnvoll realisierbar ist ? Darstellen an sich ist kein Problem, da kann ich mir mittels XSL einfach den HTML-Code darstellen und dann anzeigen. Auch das navigieren über die verschiedenen Seiten einer Umfrage ist kein Problem.
Ich sehe aber keine Möglichkeit, mir die abgegebenen Antworten zu merken oder sie wiederherzustellen (beim klick auf "Vorherige Seite").


Wäre dankbar über Anregungen und gute Ideen!!!!


----------



## Bleiglanz (28. Jul 2005)

du musst mit dem xslt dynamisch

<form 

tags erzeugen und ein servlet dazwischenschalten, das sich die antworten merkt

und

beim reload musst du diese gemerkten werte wieder in das zurückgeschickte html einpassen

(mit xalan kannst du beliebige Java-Objekte ins das xsl importieren...)


----------



## KSG9|sebastian (28. Jul 2005)

hm..servlet dazwischen schalten is klar, problem ist aber dass ich keine gute möglichkeit weis, wie ich die antworten auslese, da ja auf jeder seite der umfrage beliebig viele fragen mit verschiedenen antwortmöglichkeiten stehen können




> (mit xalan kannst du beliebige Java-Objekte ins das xsl importieren...)



Gibts da irgendwo ein Beispiel dafür ? In den Xalan-Samples hab ich nix gefunden...


----------



## Bleiglanz (28. Jul 2005)

http://xml.apache.org/xalan-j/extensions.html#basic-pattern

zur ersten frage:

eigentlich bleibt dir nichts anderes übrig, als alles in ein einziges <form> zu stecken

und als variablennamen <input type=text name=...sowas wie

antwort1
antwort2
antwort3

usw. und am server dann mit getParameter das ganze string-weise wieder aufzudröseln

(oder immen den gleichen namen, dann kriegst du am Server ein String[] und hast das Problem der Zuordnung)


----------



## KSG9|sebastian (28. Jul 2005)

ja bisher hab ich es so gemacht dass ich den elementen namen gegeben hab wie z.B.

radio1
radio2
radio3
.
.

oder

check1
check2
check3
check4


Somit kann ich auch auf die Werte zugreifen, das geht! Aber wie kann ich die Werte wieder setzen ? Muss ich dass über das XSL machen oder kann ich die Werte auch im Code setzen ?


----------



## Bleiglanz (28. Jul 2005)

das generierte html muss ja wohl dynamisch sein

also alles in eine bean, und diese bean über eine xalan-extension ins xslt hinein

ist aber nicht so optimal, wär mit jsp eventuell besser


----------



## KSG9|sebastian (28. Jul 2005)

uf bin grade bissl daneben...

bisher läuft es so ab:

XML wird transformiert und ich bekomm nen String zurück der den kompletten HTML-Code enthält, denn splite ich dann anhand eines trennzeichens, damit ich einzelnen Zugriff auf die Seiten hab. 
Dann wird das ganze mit nem Writer nur geschrieben, d.h. ich hab gar keine JSP Seite

Leider kann ich mit der Lösung keine Werte der HTML-Elemente setzen.


Deine Idee würde ungefähr so aussehen:


Ich speicher die Werte z.B. in ner Map und benutz als Key den Namen des Feldes (input, radio oder was auch immer). Im XSLT greif ich dann mittles der Extendsion auf ne Klasse zurück, die mir für nen bestimmten Key das value liefert ? 

Hast du es so gedacht ?


----------



## Bleiglanz (28. Jul 2005)

so in etwa hätte ich das jetzt versucht, aber richtig gut ist das nicht

=> xml statisch
=> stylesheet liefert auch (quasi) ein statisches html
=> da musst du jetzt die werte reinflicken...

wie gross isn das original xml?

vielleicht kannst du da bei jedem request die Werte mit in den DOM-Baum reinflicken (miese performance), dafür hättest du dann nach dem ende gleich ein fertig ausgefülltes formular als xml??


----------



## KSG9|sebastian (28. Jul 2005)

das teil solll soweit dynamisch gehalten werden, dass man auch noch andere umfragen erstellen kann, deshalb kann das XML schon mal recht groß werden

zudem stehen in dem XML auch keine HTML elemente sondern nur diverse XML Elemente die später zu nem HTML element umgeformt werden

aber stimmt..das wär ne möglichkeit, dass ich das XML zu ner HTML datei transformiere. die könnte ich dann mit DOM einlesen und die werte setzen. dannach eine zweite transformation drüberlaufen lassen, welche dann korrektes HTML mit gesetzen Werten erzeugt.


----------

