JSF Datenaustausch JSF zu Javascript

Centai

Mitglied
Ich habe eine JSF-Anwendung, bei welcher auch JavaScript zu Einsatz kommt. Wenn ich Werte von meiner Bean gebraucht habe, dann habe ich sie mir immer so in das JavaScript generieren lassen:

Code:
var jsVar = "#{myBeanController.myValue}";


Jetzt habe ich aber das Problem, dass ich in JavaScript dynamischen Zugriff auf ein Array in meiner Bean brauche. Allerdings kann ich ja nicht per JavaScript durch das Array iterieren, da ja im ersten Schritt der Inhalt Serverseitig generiert wird und erst dann die JS-Funktionen im Browser laufen. Ich habe dazu schon einiges gelesen und bisher folgende Lösungsansätze:

1. JavaScript Code dynamisch generieren aus meiner Bean
--> empfinde ich als unschön

2. JSON ect. sich näher anschauen

Gibt es sonst noch gute Lösungsansätze?
 
Du kannst mit Expression Language auch auf ein Array zugreifen. Müsste in etwa so gehen

Code:
var jsVar = "#{myBeanController.myArray[i]}";
 
Ist i dann eine JS Variable? Wenn ich folgendes mache:

Code:
var itemCount = "#{myBeanController.itemCount}";
for (var i = 0; i < itemCount; i++) {
var jsVar = "#{myBeanController.myArray[i]}";
// do Something

bekomme ich nichts zurück bzw. ich sehe im Seitenquelltext, dass für itemCount zwar der Zahlenwert generiert wurde, aber jsVar bleibt leer.
 
Bin leider kein JS Profi ... aber für mich sieht das so korrekt aus. In jsVar sollte jetzt eigentlich immer der entsprechende Wert des Arrays (je nach Schleifendurchlauf) stehen.

[EDIT]
Wenn die Gültigkeitsbereiche von Variablen bei JS und Java gleich sind ist jsVar auch nur innerhalb der Schleife bekannt
[/EDIT]
 
Aber es werden doch erst die JSF-Tags aufgelöst (Server) und dann erst das JavaScript durchlaufen (Client). Woher bekommst die JS-Schleife Zugriff auf das komplette Array der Bean?

Die Variable in der Schleife ist nur lokal, weil der Wert woanders hin weitergegeben wird (innerhalb der Schleife), aber auch bei einer globaleren Deklaration ändert sich nichts...
 
Wie gesagt bin da kein Profi, aber wenn es stimmt was du sagst ... warum machst du dann keine Schleife mit JSF? bzw. warum muss das Array in JS durchlaufen werden?

Eine weitere Alternative wäre, die Werte des Arrays in hidden Fields zu schreiben.
 
Code:
var itemCount = "#{myBeanController.itemCount}";
Ist böse, wenn überhaupt dann mit dem XML-Namespace xmlns:fn="http://java.sun.com/jsp/jstl/functions"
Code:
var itemCount = ${fn:length(myBeanController.myArray)};



Am besten ist eine JSON-Lösung.
 
Zuletzt bearbeitet:
Ich muss eine JavaScript Bibliothek (OpenLayers, welche Daten geographisch visualisiert) mit Daten befüllen. Ich hab keine entsprechende JSF-Bibltiothek oder Komponente gefunden, welche die Funktionalität auch kann...
 

Zurück
Oben