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
gibt eine Java-String-Variable wie "foo"
aus, dann würde das generierte HTML wie
Aber hey, schau mal, das repräsentiert eine JavaScript Variable namens foo
, kein JS String Wert! Also wenn du letztendlich letztendlich als
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>
.
Verschachteln Sie bei Bedarf ein <f:ajax>
, um es asynchron zu machen.
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.
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
Tags und Links javascript parameter-passing jsf