Wie übergebe ich JSF-Eigenschaften für verwaltete Beans an eine JavaScript-Funktion?

8

Ich würde gerne wissen, wie ich JSF-Managed-Bean-Eigenschaften an eine JavaScript-Funktion übergeben kann.

In etwa so:

%Vor% %Vor%     
Isma90 05.02.2013, 13:47
quelle

3 Antworten

21

Dies ist nicht genau "Weitergabe" von JSF-Variablen. Dadurch werden nur JSF-Variablen wie JavaScript-Variablen / -Werte gedruckt. Wisst ihr, JSF und JS laufen überhaupt nicht synchron. JSF läuft im Webserver und produziert HTML / CSS / JS-Code, der wiederum im Webbrowser läuft, sobald er dort angekommen ist.

Ihr konkretes Problem wird wahrscheinlich dadurch verursacht, dass Sie JSF-Code so geschrieben haben, dass er eine ungültige JS-Syntax generiert. Eine einfache Möglichkeit, dies zu überprüfen, besteht darin, einfach die JSF-generierte HTML-Ausgabe zu überprüfen, die Sie mit der rechten Maustaste finden, Quelltext anzeigen im Browser und prüfen, ob in der JS Konsole im Browser, die Sie finden können, indem Sie F12 in Chrome / IE9 + / Firefox23 + drücken.

Stellen Sie sich #{entity.key} hier vor

%Vor%

gibt eine Java-String-Variable wie "foo" aus, dann würde das generierte HTML wie

aussehen %Vor%

Aber hey, schau mal, das repräsentiert eine JavaScript Variable namens foo , kein JS String Wert! Also wenn du letztendlich letztendlich als

enden willst %Vor%

Dann sollten Sie JSF anweisen, genau dieses HTML zu erzeugen:

%Vor%

Achten Sie jedoch auf Sonderzeichen in der JSF-Variablen. Sie können dafür die Funktion OmniFaces of:escapeJS() verwenden.

Unrelated auf das konkrete Problem, die konkrete Umsetzung von actualizaMenu() macht keinen Sinn. Sie scheinen zu versuchen, eine Bean-Eigenschaft festzulegen. Sie sollten JS nicht dafür verwenden, sondern stattdessen <h:commandLink> .

%Vor%

Verschachteln Sie bei Bedarf ein <f:ajax> , um es asynchron zu machen.

    
BalusC 05.02.2013, 13:56
quelle
1

Ich würde empfehlen, die Ereignisbindung mit jQuery und das Datenattribut für Elemente zu verwenden, um dasselbe Ergebnis zu erhalten (vorausgesetzt, Sie verwenden jQuery):

%Vor%

...

%Vor%

Und, wie anderswo erwähnt, wenn #{linkedMenu.setKey(key)} tatsächlich ein Stück Javascript zurückgibt (was unwahrscheinlich ist und wahrscheinlich auch dann wirklich schlecht wäre), müssen Sie die Funktion ebenfalls reparieren.

    
quelle
1

Ich weiß, dass diese Frage alt ist, aber für diejenigen, die noch suchen, gibt es eine Alternative.

Wenn Sie primefaces verwenden, probieren Sie es einfach aus. Anfragekontext

    
Jonathas Pacífico 15.04.2014 20:41
quelle