| 

.NET C# Java Javascript Exception

Axaj + Template Probleme

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.


Axaj + Template Probleme

nullable - 24.02.2008 21:20
Hallo,

ich beschäftige mich grade mit Grails und baue dazu eine kleine PM Anwendung. Es gibt Projekte und User, die in einer M:N Relation stehen. Ich bin grade dabei den gescaffoldeten Show-View eines Projektes dahingehend zu modifizieren, sodass noch nicht zugewiesene User darunter in einem Dropdown Feld erscheinen. Neben dem Dropdown gibt es einen Add Button. Wenn man diesen anklickt wird in einer darüberliegenden Liste der neue Projekt User angezeigt und verschwindet aus dem Dropdown. Dies wollte ich mit Ajax über ein Template realisieren.

Template:

<ul>
<g:each in="${project.users}" var="user">
	<li>${user.name}</li>
</g:each>
</ul>
<br />                            	
<g:formRemote name="addUserForm" url="[controller: 'project', action: 'ajaxUpdate']" update="contribution">
	<g:select name="user" from="${leftUsers}" optionKey="id" />
	<input type="hidden" name="project_id" value="${project.id}">
	<input type="submit" name="addUser" value="Add">
</g:formRemote>

Das Template wird im Projekte Show-view aufgerufen. Die Show Action nutzt eine Hilfsmethode im Projekte Controller um alle User herauszufinden, die nicht im aktuellen Projekt eingetragen sind

Methode leftUsers
protected def leftUsers(Project project){
			def projectUsers = project.users
			def allUsers = User.findAll()
			def leftUsers = []				
			
			allUsers.each { user -> 
					if(!projectUsers.contains(user)) leftUsers.add(user)
			}				
			
  leftUsers
}

Nun ja, ob das alles so optimal ist weiß ich nicht. Wenn ich show aufrufe wird alles richtig gerendert. Wenn ich auf 'Add' neben dem Dropdown klicke wird der User auch korrekt dem Projekt zugeordnet und das entsprechende div per Ajax geupdatet (neuer User erscheint ) in Liste.

ajaxUpdate Action
def ajaxUpdate = {
	def project = Project.get(params.project_id)
	def user = User.get(params.user)
	
	project.addToUsers(user)
	project.save()    	

	render (template: "ajaxUpdate", var: "project", collection: [project])	
}

Meine Frage ist nun wie bekomme ich das Dropdown im Template auch upgedated? Momentan wird nur die neue Userliste aktualisiert. Ich müßte die nicht zugeordneten User wieder neu ermitteln und irgendwie an das Template eine zweite Liste übergeben können oder so.

Oder ist dieser Ansatz komplett daneben und man macht das eigentlich anders, ich meine rein architektonisch betrachtet?

Ich hoffe ich konnte klar machen wo mein Problem liegt.

mit freundlichen Grüßen

Sebastian


Re: Axaj + Template Probleme

nullable - 25.02.2008 13:12
Hallo,

ich habe einen workaround gefunden, der meiner Meinung nach unsauber ist, aber erstmal funktioniert.

dazu habe ich die leftUsers in den session scope gesteckt

def ajaxUpdate = {
			def project = Project.get(params.project_id)
			def user = User.get(params.user)
			
			project.addToUsers(user)
			project.save()    	
						
			session.leftUsers = leftUsers(project)
			render (template: "ajaxUpdate", var: "project", collection: [project])	
		}

mein template nutzt das dann wie folgt

<ul>
<g:each in="${project.users}" var="user">
	<li>${user.name}</li>
</g:each>
</ul>
<br />                            	
<g:formRemote name="addUserForm" url="[controller: 'project', action: 'ajaxUpdate']" update="contribution">
	<g:select name="user" from="${session.leftUsers ? session.leftUsers : leftUsers}" optionKey="id" />
	<input type="hidden" name="project_id" value="${project.id}">
	<input type="submit" name="addUser" value="Add">
</g:formRemote>

Kommentare und Verbesserungsvorschlaege erwünscht.

mit freundlichen Grüßen

Sebastian


Stelle deine Groovy-Frage jetzt!


Diese Seite zeigt den Thread "Axaj + Template Probleme" 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.