| 

.NET C# Java Javascript Exception

g:select refresh view

Dies ist das Archiv des ehemaligen Forums zum Thema Groovy, Grails, Griffon und Bean Scripting Framework, welches unter groovy-forum.de existierte. Die neue Adresse des Groovy-Forums ist: http://codekicker.de/fragen/themen/groovy.


g:select refresh view

jeton.memeti - 07.12.2010 09:47
Hallo zusammen,

Ich habe in der View ein g:select, welches jenachdem, was angeklickt wird, die Seite neu laden soll. Dabei wird dann eine andere Revision des Dokuments angezeigt.
<g:select name="revisionNr" optionKey="id" from="${document?.revisions}" value="${revision?.id}"
										  onchange="${remoteFunction(
													  controller:'document',
													  action:'show',
													  params:'\'id=\'+document.getElementById(\'docid\').value+\'&revId=\'+ escape(this.value)')}" />

Der Code im entspr. Controller wird auch ausgeführt (durch println's geprüft), jedoch wird die Seite nicht neu geladen. Wie kann ich dies erzwingen? (Via Links funktioniert es wie gewünscht.)

Bin für jede Hilfe dankbar!

Gruss,
Jeton

Edit:
Hier noch die entsprechende Action:
def show = {
		def document = Document.get(params.id)
		def revision
		if (params.containsKey("revId")) {
			revision = Revision.get(params.revId)
			println "params rev id" //TODO delete println
		} else {
			revision = Revision.get(document.currentRevId)
			println "current rev id" //TODO delete println
		}
		def user = User.get(revision.editorId)
		[ document : document, revision : revision , user : user ]
	}


Re: g:select refresh view

koeberle - 07.12.2010 11:08
remoteFunction löste eine AJAX-Aufruf aus und dieser braucht ein Zeil das aktualisiert werden soll. Sprich du musst ein update:[success:'target'] angeben. Wobei target die id von dem dom-Element ist dessen Inhalt aktualisiert werden soll. Wenn du aber wie du schreibst einfach die Seite aktualisieren willst, reicht es aus wenn du einen einfachen Link aufrufen lässt sobald sich die Auswahl ändert.

Christian


Re: g:select refresh view

jeton.memeti - 07.12.2010 22:10
danke für deine Antwort!

update:[success:'target'] lädt die Seite wie gewünscht neu, jedoch führt es leider zu Problemen mit dem Sitemash, wodurch dann die anderen divs nochmals gezeichnet werden und eine Verschachtelung der div resultiert.

Dein zweiter Vorschlag sieht da vielversprechender aus, jedoch wie implementiere ich dies? <g:select onchange=? />
<g:select name="revisionNr" optionKey="id" from="${document?.revisions}" value="${revision?.id}"
										  onchange="${link(controller:'document', action:'show', params:'\'id=\'+document.getElementById(\'docid\').value+\'&revId=\'+this.value')}" />
bei onchange passiert jetzt jedoch nichts, d.h. es wird nichts zum Controller weitergereicht.

Hast du einen Vorschlag?

Gruss,
Jeton


Re: g:select refresh view

jeton.memeti - 07.12.2010 23:08
habe es nun mit einer etwas unkonventionellen Lösung zum Laufen gekriegt.

(für alle, die es interessieren mag:)
<select name="revisionNr" onChange="javascript: if (this.value) {location.href=this.value}">
								  <g:each in="${document?.revisions}">
									  <g:if test="${it.id == revision?.id}">
										  <option selected="selected">${it}</option>
									  </g:if>
									  <g:else>
										<option value="${document?.id}?revId=${it.id}">${it}</option>
									  </g:else>
								  </g:each>
								</select>


Re: g:select refresh view

milkyman - 10.12.2010 08:47
Ok, Hauptsache es funktioniert. Aber wieso nutzt du nicht das g:select TAG? Da musst du das nicht alles per Hand coden mit each und if usw.

Bye,
Horst


Re: g:select refresh view

jeton.memeti - 10.12.2010 09:00
Weil ich es nicht zum Laufen gebracht habe, dass die Seite neu geladen wird. Ich bringe es dazu, dass div's neu geladen werden (mit dem richtigen Inhalt), dadurch werden aber meine div's verschachtelt. Und richtig, Hauptsache es funktioniert ;-)


Re: g:select refresh view

milkyman - 10.12.2010 10:01
Wo ist der Unterschied?

Das neu laden wird im onChange getriggert. Das bleibt auch fürs g:select gleich. Demnach sollte sich nichts ändern daran, wie der reload stattfindet. Evtl. wird der Link beim optionKey nicht richtig zusammengesetzt?

Bye,
Horst


Stelle deine Groovy-Frage jetzt!


Diese Seite zeigt den Thread "g:select refresh view" der ehemaligen Webseite groovy-forum.de, welche durch einen Serverunfall zerstört wurde. codekicker.de hat viele Konversationen über die beliebte Programmiersprache Groovy und zugehörige Frameworks wie das Grails-Framework retten können.

Hast Du eine Frage zum Thema Groovy, Grails oder allgemein Java? Viele ehemalige groovy-forum.de Mitglieder beantworten dir auf codekicker.de deine Frage! Stelle jetzt eine Frage!

Viele weitere Diskussionen zu Grails und Groovy befinden sich auf der Threadübersicht des alten groovy-forum.de.