这<f:attribute>
是一个 JSF 标记,它在生成 HTML 代码期间在网络服务器中运行。JavaScript 是一种客户端语言,它不在网络服务器中运行,而是在检索到所有 JSF 生成的 HTML 代码后在网络浏览器中运行。然而,您似乎期望它们“同步”运行。因此这是不正确的。
为了实现您的想法,您基本上需要提供<h:inputHidden>
绑定到 bean 属性的哪个,并让 JS 在触发远程命令请求之前填充它。
例如
<h:form id="form">
<h:inputHidden id="galaxie" value="#{bean.galaxie}" />
<p:remoteCommand ... onstart="$('#form\\:galaxie').val(jstest())" process="@form" ... />
</h:form>
或者,更简单的方法是将其作为远程命令函数参数传递,该参数接受表示请求参数映射的 JS 对象。给定一个
<h:form>
<p:remoteCommand name="foo" ... />
</h:form>
你可以这样做:
foo({ galaxie: jstest() });
@ManagedProperty
您可以通过或来收集它ExternalContext#getRequestParameterMap()
。
更新:自 PrimeFaces 3.3 起,<p:remoteCommand>
函数中参数的语法发生了变化。如果您至少使用 PrimeFaces 3.3,则函数调用应如下所示:
foo([{ name: 'galaxie', value: jstest() }]);
另请参阅从 JavaScript 向 p:remoteCommand 传递参数。