# Dynamischer Fragebogen



## Mephist0 (5. Mrz 2009)

Hi,

ich bin noch ganz neu in Java und soll einen Fragebogen für eine Freundin erstellen.

Der Fragebogen soll z.B. Frage 7 deaktivieren, wenn bei Frage 6 eine bestimmte Antwort angeklickt wird. Da man das mit PHP nicht lösen kann, habe ich micht entschlossen auf Java zu übergreifen. Die Fragen bestehen aus Textboxen, Radiobuttons oder Checkboxen.

Jetzt natürlich meine Frage: Wie lässt sich das Managen?

Grüße, Mephisto.


----------



## 0x7F800000 (5. Mrz 2009)

Sicher, dass du auf dem richtigen Planeten gelandet bist? Da du schon PHP erwähnt hast, entsteht irgendwie der Verdacht, dass du JavaScript gemeint haben könntest...


----------



## hdi (5. Mrz 2009)

Eine Alternative zu JavaScript wäre ein _JApplet_.

Aber bevor wir hier voreilig urteilen: Stimmt es denn überhaupt, dass dieser Bogen
im Web laufen muss und nicht als normale Desktop-Anwendung?


----------



## Mephist0 (5. Mrz 2009)

Ääääääh 

Also hier nur Programmorientiertes programmieren, nicht webbasierend?

//EDIT: Jop, als Webanwendung.


----------



## hdi (5. Mrz 2009)

> Programmorientiertes programmieren


Was ist denn *das* 

edit: Okay schon wieder gleichzeitig 

Wie gesagt: JavaScript oder JApplet.
Hier wird dir nur mit letzterem geholfen, denn ein JApplet ist Java (im Web), 
und JavaScript ist was ganz anderes als Java.

Hier ein Tutorial zu Applets:

How to Make Applets (The Java™ Tutorials > Creating a GUI with JFC/Swing > Using Swing Components)


----------



## Wildcard (5. Mrz 2009)

Natürlich geht es hier auch um Webanwendungen (nicht nur um Applets wie von hdi angedeutet), solange die Sprache der Wahl Java ist und nicht etwa client seitiges Javascript.
Was genau hat dir den vorgeschwebt? Eine AJAX Lösung?


----------



## hdi (5. Mrz 2009)

Sorry war unvollständig ausgedrückt. Ich denke aber nicht dass er hier irgendwelche
Servlets aufziehen will oder jsp's. 
Ich denke schon eher, dass er nur will dass man's im Browser starten kann, also Applet


----------



## Mephist0 (5. Mrz 2009)

Hi,

sorry für die Verwirrung. Ich will definitiv einen Webbasierten Fragebogen erstellen, sprich kein Java. Ich kannte den Unterschied bissher nicht.

AJAX habe ich mir auch schon vorgestellt, aber gesagt gekriegt, das es das Maß eines Fragebogen übersteigt, weil: zu kompliziert.

Ich wende mich jetzt am besten an ein JavaScript Forum^^.

Danke trotzdem für die Hilfe. Wenn noch jemand eine Idee für JavaScript-Lösung hat, würde ich diese natürlich trotzdem gerne hören.

Grüße, Mephisto.


----------



## 0x7F800000 (5. Mrz 2009)

Wenn du rein Clientseitig entscheiden kannst, was ein- und ausgeblendet wird, brauchst du doch kein AJAX, ich könnte mir ganz gut vorstellen, dass auch so eine einfache enblend-ausblendmethode sehr nützlich sein kann.


----------



## Mephist0 (5. Mrz 2009)

Und wie kann man so eine Einblende-Funktion einbauen ?


----------



## Illuvatar (6. Mrz 2009)

So was in der Art (ungetestet):

```
<html>
<head>
<title>Test</title>
<script type="text/javascript">
function updateQuestionStatus()
{
  $("button2").disabled = !$("button1").checked;
  //$("button5").disabled = $("button4").checked;
  // ...
}
function $(name) {return document.getElementById(name);}
</script>
</head>
<body>
...
Macht es Sinn die nächste Frage zu stellen? <input type="checkbox" id="button1" onchange="updateQuestionStatus()"><br>
Warum haben Sie Frage 1 mit ja beantwortet? <input type="checkbox" id="button2" disabled="disabled" onchange="updateQuestionStatus()">
...
</body>
</html>
```


----------



## 0x7F800000 (6. Mrz 2009)

Omfg, sehen wir aus wie Javascript forum oder was? Anscheinend ja^^ :cry:
[HIGHLIGHT="xml"]<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
	<title>irgendsoein toller fragebogen...</title>
	<style type="text/css">
	*{
		background-color:	#000000;
		color:				#FFFFFF;
	}

	div{
		background-color:	#553300;
		margin:				10px;
		padding:			10px;
		width:				80%;
		overflow:			hidden;
	}
	</style>
	<script type="text/javascript">
	//<![CDATA[
	function init(){
		document.getElementById("myForm").cbHead.checked=false;
		document.getElementById("myForm").cbEyes.checked=false;
		document.getElementById("myForm").cbGoogle.checked=false;
		initBlocks();
	}

	function initBlocks(){
		document.getElementById("blockHead").style.display="block";
		document.getElementById("blockEyes").style.display="none";
		document.getElementById("blockGoogle").style.display="none";
		document.getElementById("blockYouSuck").style.display="block";
		document.getElementById("blockOk").style.display="none";
	}

	//eigentlich müsste man auf dem server schönes Modell für diesen Fragebogen erzeugen, 
	//dann topologische Sortierung der einzelnen Fragen durchführen
	//die Adjazenzliste schön übersichtlich oben in irgendeine Datenstruktur a lá Map<Frage,List<Frage>> packen usw...

	//aber da du eine JS Frage in einem Javaforum postest, wird dich die Hässlichkeit der folgenden Lösung hoffentlich nicht zu sehr ankotzen^^
	//sehr gammelige Lösung, müsste sogar javascriptlern tränen in die Augen treiben...

	function updateBlocks(){
		initBlocks();
		if(document.getElementById("myForm").cbHead.checked){
			document.getElementById("blockEyes").style.display="block";
			if(document.getElementById("myForm").cbEyes.checked){
				document.getElementById("blockGoogle").style.display="block";
				if(document.getElementById("myForm").cbGoogle.checked){
					document.getElementById("blockYouSuck").style.display="none";
					document.getElementById("blockOk").style.display="block";
				}
			}
		}
	}
	// ]]>
	</script>
</head>
<body onload="javascript:init()">
	<form id="myForm" action="http://www.wherever.whatever.xyz"
	  method="post" enctype="multipart/form-data">

		<div id="blockHead">
		<label><input type="checkbox" name="cbHead" value="wtf1" onclick="javascript:updateBlocks()"/>Ich habe einen Kopf</label>
		</div>

		<div id="blockEyes">
		<label><input type="checkbox" name="cbEyes" value="wtf2" onclick="javascript:updateBlocks()"/>Ich habe sogar Augen</label>
		</div>

		<div id="blockGoogle">
		<label><input type="checkbox" name="cbGoogle" value="wtf3" onclick="javascript:updateBlocks()"/>Ich habe schon was von Google geh&ouml;rt</label>
		</div>

		<div id="blockYouSuck" style="background: red">
		Trifft Irgendwas nicht zu? Tja, dann haben Sie m&auml;chtig Pech gehabt...
		</div>

		<div id="blockOk" style="background: green">
		Trifft alles zu? Dann googlen Sie mal nach "jendryschik einf&uuml;hrung in xhtml und css" 
		</div>
	</form>

	<p>
    <a href="http://validator.w3.org/check?uri=referer"><img
        src="http://www.w3.org/Icons/valid-xhtml10"
        alt="Valid XHTML 1.0 Strict" height="31" width="88" /></a>
	</p>

</body>
</html>
[/HIGHLIGHT]
Im Prinzip "voll funktionsfähig" aber ich brauche wohl nicht zu sagen, dass es totaler schrott ist, ich seh diesen JS-Krempel heute zum zweiten Mal im Leben^^ 

edit: so, dieses Teil kommt nun auch durch den w3c-Validator, habe vorhin den <![CDATA[]]> Block vergessen.


----------



## ARadauer (6. Mrz 2009)

$("button2").disabled = !$("button1").checked;

??

is das jquery?


----------



## Noctarius (6. Mrz 2009)

$("button2") hat soweit ich weiß den selben Effekt wie "document.getElementById('button2')"

Ob das JQuery genannt wird - ka, aber JavaScript ist trotzdem hässlich und ein "OOP-Ansatz" (hier können gar nicht genug Anführungsstriche stehen) wie Ext2 (benutzen wir in der Firma für die AJAX-basierten Oberflächen) macht das Ganze auch nicht schöner.


----------



## Illuvatar (6. Mrz 2009)

ARadauer hat gesagt.:


> $("button2").disabled = !$("button1").checked;
> 
> ??
> 
> is das jquery?



Ich bin das von Prototype so gewöhnt, aber ich glaub das machen viele Frameworks so. Ich hab die Methode aber extra noch dazugeschrieben


----------



## mvitz (6. Mrz 2009)

Ist ursprünglich prototype. Aber fast alle höheren JavaScript Frameworks bauen auf prototype auf


----------



## Noctarius (6. Mrz 2009)

Tja der Name ist halt Programm geworden, aber stimmt jetzt wo Ihr es erwähnt habt fällt mir auch ein, dass ich das in der Dokumentation zu Prototype das erste Mal gesehen hab.

Wie nennen die das nochmal? Annonyme-Funktion oder so, gell?


----------



## Mephist0 (6. Mrz 2009)

Danke! Ich probier mich mal durch :grin:!


----------



## 0x7F800000 (6. Mrz 2009)

diese Dollarzeichen hab ich noch nie gesehen (o wunder^^), aus dem ersten code wurde zwar sofort klar, dass es anscheinend ein element über id ansprechen soll, aber irgendwie hat der js interpreter das nicht direkt geschluckt... Ich hab grad irgendwie meine schwierigkeit damit, zu verstehen, wohin separate javascript-pakete denn geladen werden sollen, wenn das ein clientseitiger script ist  Muss man da einen zusäzlichen script-tag angeben, der auf irgendsoeine "prototype-package" zeigt oder wie läuft es normalerweise ab...?


----------



## Illuvatar (6. Mrz 2009)

Normalerweise ist dann da halt noch ein

```
<script type="text/javascript" src="prototype.js" />
```

Der von mir oben gepostete Code sollte aber eigentlich einfach so lauffähig sein. Hat zumindest beim Testen in Opera funktioniert 

Edit: ach ja, ich verschiebs mal in den Javascript-bereich


----------



## 0x7F800000 (6. Mrz 2009)

Illuvatar hat gesagt.:


> Normalerweise ist dann da halt noch ein
> 
> ```
> <script type="text/javascript" src="prototype.js" />
> ```


wunderbar, nach dem prinzip der geringsten überraschung



> Der von mir oben gepostete Code sollte aber eigentlich einfach so lauffähig sein. Hat zumindest beim Testen in Opera funktioniert


ja, sorry, habe anfangs dieses

```
function $(name) {return document.getElementById(name);}
```
übersehen, war es denn überhaupt da? :grin:


----------



## Illuvatar (6. Mrz 2009)

Andrey hat gesagt.:


> war es denn überhaupt da? :grin:



ja :grin:

1234567890


----------



## 0x7F800000 (6. Mrz 2009)

Illuvatar hat gesagt.:


> ja :grin:


 okay, dann habe ich das wirklich einfach nur übersehen...


----------

