这并不完全是 JSF 变量的“传递”。这只是打印 JSF 变量,就好像它们是 JavaScript 变量/值一样。要知道,JSF 和 JS 根本不同步运行。JSF 在网络服务器中运行并生成 HTML/CSS/JS 代码,一旦到达那里,这些代码又在网络浏览器中运行。
您的具体问题很可能是因为您编写 JSF 代码的方式会生成无效的 JS 语法。验证这一点的简单方法是检查 JSF 生成的 HTML 输出,您可以通过右键单击找到该输出,在浏览器中查看源代码,并检查您是否在浏览器中的 JS 控制台中没有看到任何语法错误报告,您可以在 Chrome/IE9+/Firefox23+ 中按 F12 查找。
想象一下,#{entity.key}
这里
<a onclick="actualizaMenu(#{entity.key})">#{entity.nombre}</a>
打印一个 Java 字符串变量"foo"
,然后生成的 HTML 看起来像
<a onclick="actualizaMenu(foo)">some name</a>
但是,你看,它代表一个名为的 JavaScript变量foo
,而不是一个 JS 字符串值!所以如果你真的想最终成为
<a onclick="actualizaMenu('foo')">some name</a>
那么您应该指示 JSF 准确生成该 HTML:
<a onclick="actualizaMenu('#{entity.key}')">#{entity.nombre}</a>
不过要注意 JSF 变量中的特殊字符。您可以为此使用OmniFacesof:escapeJS()
功能。
与具体问题无关,具体实现actualizaMenu()
毫无意义。您似乎正在尝试设置 bean 属性。您不应该为此使用 JS,而是使用 a <h:commandLink>
。
<h:commandLink value="#{entity.nombre}" action="#{linkedMenu.setKey(entity.key)}" />
如有必要,嵌套 a<f:ajax>
以使其异步。